Search

[Vue3] v-model 양방향 바인딩 정리

form에서 입력 양식을 처리할 때 입력 요소의 값과 자바스크립트 요소의 값을 동기화 해야 하는 경우가 많다.

input

아래 태그에서 처럼 input 태그의 입력이 있을 때마다 @input 디렉티브를 통해서 value 를 동기화 해주어야 한다.
const inputValue = ref('');
JavaScript
복사
<input type="text" :value="inputValue" @input="event => (inputValue = event.target.value)" />
HTML
복사
이 작업을 단축한 것이 v-model 디렉티브이다. v-model 디렉티브를 사용하면 아래와 같이 코드를 줄일 수 있다.
<input type="text" v-model="inputValue" />
HTML
복사
이렇게 v-model 을 사용하면 자동으로 양방향 데이터 바인딩이 가능하다.

checkbox

const checkboxValue = ref(true);
JavaScript
복사
<input type="checkbox" id="checkbox" v-model="checkboxValue" /> <label for="checkbox">{{ checkboxValue }}</label>
HTML
복사
이렇게 했을 때는 checked 상태가 어떤가에 따라서 보여지는 화면은 아래와 같을 것 이다.

Radio

const radioValue = ref(true);
JavaScript
복사
<label> <input type="radio" name="type" value="HTML" v-model="radioValue" /> HTML </label> <label> <input type="radio" name="type" value="CSS" v-model="radioValue" /> CSS </label> <div>{{ radioValue }}</div>
HTML
복사

Select

const selectValue = ref('HTML');
JavaScript
복사
<select v-model="selectValue"> <option value="HTML">HTML</option> <option value="CSS">CSS</option> <option value="JavaScript">JavaScript</option> </select> <div>{{ selectValue }}</div>
HTML
복사
이렇게 v-model 은 HTML 요소가 무엇이냐에 따라서 서로 다른 속성과 이벤트를 처리한다.
HTML
처리 속성
처리 이벤트
input type=”text”
value
input
input type=”textarea”
value
input
input type=”checkbox”
checked
change
input type=”radio”
checked
change
input type=”select”
value
change

References