프로그래밍에서 데이터를 템플릿이나 문자열 내에 삽입하는 방법
Vue.js에서는 주로 HTML 템플릿 안에서 JavaScript 데이터를 동적으로 삽입할 때 사용된다. 간단히 말해서, 보간법은 템플릿 내에서 변수를 사용하여 동적으로 값을 출력하는 방법이다. 예를 들어, 사용자가 입력한 값을 텍스트로 화면에 출력하거나, 변수의 값을 HTML 속성에 동적으로 반영할 때 유용하다!
<p>{{ message }}</p>
여기서 {{ message }}는 message라는 변수를 템플릿 안에 삽입하는 보간법이다. Vue.js는 이 구문을 사용하여 message에 해당하는 데이터를 화면에 출력한다.
보간법을 사용하는 이유?
1. 동적 업데이터: Vue.js에서 데이터가 변경되면 해당 데이터를 사용하는 템플릿도 자동으로 업데이트된다.
2. 코드 간결성: 템플릿 내에서 JavaScript 코드와 데이터를 직접적으로 삽입할 수 있어서 코드가 간결해지고 가독성이 좋아진다.
보간법의 종류?
1. 텍스트 보간법: 데이터를 텍스트로 삽입
예: {{ variable }}
2. 속성 바인딩: HTML 요소의 속성에 데이터를 삽입
예: <img v-bind:src="imageSrc">
3. 양방향 바인딩(v-model): 입력값을 데이터와 연결하여 양방향으로 동기화
=> 보간법은 Vue.js에서 데이터를 HTML 요소에 반영하는 방법이다!
Vue 디렉티브(directive 지시자)
v-text, v-html 디렉티브
- 이스케이프란? HTML 태그 문자가 그대로 렌더링되지 않도록 "변환"하는 과정이다. 예를 들어, `<div>` 같은 태그가 실제 HTML로 해석되지 않고 텍스트로 그대로 출력된다.
- {{ }} (문자열 보간법): 템플릿 안에서 데이터를 텍스트로 출력하지만, HTML 태그를 이스케이프하여 HTML 태그가 표시되지 않고 텍스트로만 보임
- v-text: {{ }}와 비슷하지만, HTML 태그도 텍스트로 출력된다. 즉, HTML 코드가 그대로 표시됨
v-bind:src -> :srcv-model 기본 사용법
checkbox와 v-model 바인딩
수식어(modifier)
<input type="text" v-model.lazy="name" />
<!-- input에서 엔터를 치거나 포커스 이동했을 때 입력값과 속성을 동기화 -->
<input type="text" v-model.number="num" />
<!-- 문자열을 숫자로 자동 형변환시켜 속성에 반영 -->
<input type="text" v-model.trim="message" />
<!-- 문자열의 앞뒤 공백을 자동으로 제거 -->
<div id="app">
<input type="text" :value="name" @input="changeName" /> // : 는 v-bind 의미
<br />
이름: <span>{{name}}</span>
</div>
<script src="https://unpkg.com/vue"></script>
<script>
let vm = Vue.createApp({
name: 'App',
data() {
return { name: '' };
},
methods: {
changeName(e) {
this.name = e.target.value;
},
},
}).mount('#app');
</script>
- UI 상태 변경이 잦다면 'v-show' 사용 -> 단순히 'display: none;' 처리하므로 DOM 조작 비용이 적음
- 요소를 아예 추가/제거해야 한다면 'v-if' 사용 -> 필요할 때만 렌더링하므로 성능상 유리
태그 자체가 없다가 생김 v-if의 경우!!
v-for 디렉티브
자바스크립트의 for문과 유사
반 복적인 데이터를 렌더링하기 위해 사용
<태그명 v-for="변수 in 배열" :key="id값"><태그명 v-for="(val, key) in 객체" :key="key"><인덱스 번호가 필요한 경우>
<태그명 v-for="(contact, index) in contacts" …><태그명 v-for="(val, key, index) in regions" …>여러 요소를 묶어서 반복 렌더링하기
<template> 요소에 v-for 디렉티브 사용 <template v-for=”…”>v-for 디렉티브와 key 속성
key 속성이 없으면 → 전부 다시 렌더링
key 속성이 있으면 → 위치만 변경
→ key 특성에는 인덱스 번호를 부여하지 않음. 반드시 고유한, 변경되지 않는 값을 부여
→ 가급적이면 key 특성을 부여하도록 하고, 반복 렌더링되는 각각의 요소 노드를 추적하고 요소를 재사용할 수 있도록 key 특성에 반드시 고유 값을 바인딩 해주기!
Proxy 객체
Proxy의 배열의 메서드
배열의 데이터를 변경하는 메서드들도 래핑되어 있음
psuh(), splice(), sort() 등
→ 배열의 내용 변경시 watcher에게 변경을 알려서 다시 렌더링을 일으킴
✔ Vue의 data는 Proxy로 감싸져 있어서 값 변경을 감지함!
✔ 배열을 수정해도 Vue가 감지하고 화면을 다시 그림!
✔ 개발자가 따로 신경 안 써도 자동으로 반응형 업데이트!