Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 |
28 | 29 | 30 |
Tags
- 함수정의확인
- 이클립스 설치
- db접속
- sql용어
- Now()
- serializeObject
- apt-get #apt-get 옵션 #apt-get options
- php5.x
- HAVING 절
- strip_tags #html태그제거 #PHP strip_tags
- JSTL
- PHP달력관련함수
- BufferedReader #BufferedWriter
- DATE_ADD()
- MySQL 날짜 관련 함수
- Java 및 이클립스 설치
- SQL 중복제거
- DATE_SUB()
- Java환경변수 설정
- explode #선택제거 #PHP explode
- 가상화
- CURDATE()
- CURTIME()
- PDO #DB접속
- DATE_FORMAT()
- 배열관련함수
- trim #공백 제거 #PHP trim()
- DATEDIFF()
- 영카트 #테스트메일
- apt #apt 명령어 #apt-get명령어
Archives
- Today
- Total
M
[Vue3] defineModel 본문
소개
Vue에서는 데이터 흐름 관리를 위해 props와 emit를 이용한 방식이 널리 사용되어 왔습니다. 그러나 최근에 나온 Vue3.4에서는 defineModel 방식을 권장하고 있습니다.
- props
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때 사용
- emit
부모 컴포넌트로 데이터를 전달
defineModel 이전의 방식
<!-- 자식 컴포넌트 -->
<script setup>
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])
</script>
<template>
<input
:value="props.modelValue"
@input="emit('update:modelValue', $event.target.value)"
/>
</template>
<!-- 부모 컴포넌트 -->
<Child
:modelValue="foo"
@update:modelValue="$event => (foo = $event)"
/>
이러한 방식은 간단하고 직관적이지만, 데이터 흐름이 복잡해지거나 중첩된 컴포넌트 구조에서는 유지보수가 어려울 수 있습니다.
- defineModel 설명
- Vue 3.4부터는 권장하는 방식
- 반환되는 값은 ref이며, 다른 ref처럼 접근하고 변경할 수 있지만, 부모 값과 로컬 값 사이의 양방향 바인딩응로 작동 (즉, 작성에 의해 변경되면 부모 바인딩 값도 업데이트가 된다)
- defineModel 사용방법
<script setup>
import { defineModel } from "vue";
const title = defineModel('title');
</script>
<template>
<input type="text" v-model="title" />
</template>
- defineModel arguments
const [model, modifiers] = defineModel();
// v-model을 필수로 만들기
const model = defineModel({ required: true });
// 기본값 제공
const model = defineModel({ default: 0 });
// 타입 설정
const model = defineModel({ type: String });
// 로컬 변수로 설정하여 부모로부터 전달되지 않아도 사용할 수 있음.
const model = defineModel({ local: true });
// 첫 번째 매개변수에 이름, 두번째 매개변수에 설정값을 추가
const model = defineModel('model', { required: true });
- Multiple bindings
<script setup>
const firstName = defineModel('firstName')
const lastName = defineModel('lastName')
</script>
<template>
<input type="text" v-model="firstName" />
<input type="text" v-model="lastName" />
</template>
728x90
'Vue' 카테고리의 다른 글
[Vue3] ref와 reactive 차이점 (0) | 2024.08.29 |
---|---|
[vue3] v-model 내장 수정자 (0) | 2024.08.27 |
Vue 관련 패키지 추천 (0) | 2024.08.15 |
Vue + TypeScript 설치 (0) | 2024.08.11 |