Post

Vue 3

Vue 3

title: Vue.js 기초

3.2 기본 디렉티브

3.2.1 v-text, v-html 디렉티브

v-text –> text로 출력

흔히 사용하는 형식으로 사용

1
2
3
4
5
6
7
8
9
10
11
12
<div id="app">
  <p v-html="message"></p>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      message: '<strong>안녕하세요!</strong> <em>Vue.js</em>를 사용해보세요.'
    }
  });
</script>

v-html –> html 코드를 삽입할 수 있다고 한다.

3.2.2 v-bind 디렉티브

1
2
3
4
5
6
7
8
9
10
11
12
<div id="app">
  <a v-bind:href="url">Go to Vue.js</a>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      url: 'https://vuejs.org'
    }
  });
</script>

에시를 보면 url 을 동적으로 바인딩하여 속성값을 자동으로 업데이트 한다. v-bind:src 를 그냥 :src 이런식으로 줄여 쓰기도 가능하다.

다음은 단축어들의 예시이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  v-bind shorthand: : 
  <a :href="url">Go to Vue.js</a> 
  <img :src="imageUrl" />
  
  
  v-bind:value shorthand: 
  :value 
  <input :value="inputValue" />

  v-on shorthand: @ 
  <button @click="doSomething">Click Me</button>
  <div @mouseover="handleMouseOver">Hover over me</div>

  v-model: 
  <input v-model="inputValue" />

  v-for: 
  <ul>
    <li v-for="item in items" :key="item.id"></li>
  </ul>

  v-if, v-else, v-else-if:
  <p v-if="condition">조건이 참일 때 보여집니다</p>
  <p v-else>조건이 거짓일 때 보여집니다</p>

3.3 v-model 디렉티브

3.3.1 기본 사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="app">
  <input v-model="message" placeholder="메시지를 입력하세요">
  <p>입력된 메시지: </p>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      message: ''
    }
  });
</script>

위의 v-bind 예시와 다를게 없어 보이지만 차이점은 v-model은 양방향 바인딩이기 때문에 사용자가 값을 입력하면 실시간으로 message가 업데이트 된다.

1
2
3
4
5
6
7
8
9
10
struct ContentView: View {
    @State private var message: String = ""
    
    var body: some View {
        VStack {
            TextField("메시지를 입력하세요", text: $message) // $message는 바인딩
            Text("입력된 메시지: \(message)")
        }
    }
}

3.3.2 v-model 수식어

수식어설명
v-model.trim입력 값의 앞뒤 공백을 자동으로 제거합니다.
v-model.number입력 값을 숫자로 변환하여 바인딩합니다.
v-model.lazyinput 이벤트 대신 change 이벤트에 바인딩됩니다.
v-model.deferinput 요소의 값이 변경되었을 때 즉시 업데이트하지 않고, 사용자 입력이 완료된 후 업데이트됩니다.

3.4 조건 렌더링 디렉티브

3.4.1 v-show

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="app">
  <p v-show="isVisible">이 텍스트는 조건이 참일 때만 보여집니다.</p>
  <button @click="toggleVisibility">Toggle Visibility</button>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      isVisible: true
    },
    methods: {
      toggleVisibility() {
        this.isVisible = !this.isVisible;
      }
    }
  });
</script>

설명: v-show 해당 예시에서는 참일 때만 텍스트를 보이게 하여 div를 가리게 할 수 있다. DOM에서 요소를 제거하지 않고 display:none을 통해 요소를 숨긴다고 하는데 이 부분에서는 추후에 공부가 필요할 것 같다.

3.4.2 v-if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="app">
  <p v-if="isVisible">이 텍스트는 조건이 참일 때만 보여집니다.</p>
  <button @click="toggleVisibility">Toggle Visibility</button>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      isVisible: true
    },
    methods: {
      toggleVisibility() {
        this.isVisible = !this.isVisible;
      }
    }
  });
</script>

설명: v-if는 조건이 참일 때만 해당 div를 보여준다. v-show와 달리 요소를 DOM에서 완전히 제거한다고 한다.

3.4.3 v-else, v-else-if 디렉티브

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<div id="app">
  <p v-if="isVisible">이 텍스트는 조건이 참일 때만 보여집니다.</p>
  <p v-else-if="isOtherCondition">다른 조건이 참일 때 보여집니다.</p>
  <p v-else>조건이 거짓일 때 보여집니다.</p>
  <button @click="toggleVisibility">Toggle Visibility</button>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      isVisible: true,
      isOtherCondition: false
    },
    methods: {
      toggleVisibility() {
        this.isVisible = !this.isVisible;
        this.isOtherCondition = !this.isOtherCondition;
      }
    }
  });
</script>

설명: v-elsev-else-if는 조건부 렌더링에서 v-if와 함께 사용된다. v-else-if는 다른 조건을 추가하고, v-else는 나머지 경우에 해당하는 요소를 렌더링합니다.

3.5 반복 렌더링 디렉티브

3.5.1 v-for 디렉티브

v-for 디렉티브는 배열이나 객체를 반복하여 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div id="app">
  <ul>
    <li v-for="item in items" :key="item.id"></li>
  </ul>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Cherry' }
      ]
    }
  });
</script>

3.5.2 여러 요소를 묶어서 반복 렌더링하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div id="app">
  <div v-for="(item, index) in items" :key="item.id">
    <h3></h3>
    <p></p>
  </div>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      items: [
        { id: 1, name: 'Apple', description: 'A sweet fruit' },
        { id: 2, name: 'Banana', description: 'A yellow fruit' },
        { id: 3, name: 'Cherry', description: 'A small red fruit' }
      ]
    }
  });
</script>

이런 식으로 여러 요소를 묶어 반복하면서 테이블 같은 경우도 구현할 수가 있다.

3.5.3 v-for 디렉티브와 key 특성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  <div id="app">
  <ul>
    <li v-for="item in items" :key="item.id"></li>
  </ul>
</div>

<script>
  new Vue({
    el: '#app',
    data: {
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Cherry' }
      ]
    }
  });
</script>

딕셔너리 형식의 JSON파일에서 key의 역할이 가능하다.

3.6.1 v-pre 디렉티브

1
2
3
<div v-pre>
  
</div>

로딩시 처음 한번만 실행된다고 한다.

3.6.2 v-once 디렉티브

1
2
3
<div v-once>
  <p>이 문장은 한 번만 렌더링됩니다.</p>
</div>

3.6.3 v-cloak 디렉티브

1
2
3
<div v-cloak>
  <p>  </p>
</div>

화면에 나타나지 않게 한다.

3.7 동적 아규먼트(Dynamic Argument)

1
2
3
4
5
6
7
8
9
10
11
<div :[dynamicArg]="message"></div>

<script>
  new Vue({
    el: '#app',
    data: {
      dynamicArg: 'title',
      message: '동적 바인딩 예시'
    }
  });
</script>
This post is licensed under CC BY 4.0 by the author.