defineProps, defineEmit, defineModel 차이
759
2 asked
부모와 자식 컴포넌트간의 데이터 교환에 있어
부모 -> 자식 : props
자식 -> 부모 : emit
이라는건 어느정도 개념이 잡힌 것 같습니다.
근데, 좀 더 찾아보니 부모자식 컴포넌트 사이에도 model을 지정해서 양방향 바인딩이 가능하다는 예제를 본 것 같습니다.
model을 사용하여 props & emit을 대체한다면 복잡한 코드가 좀 더 나아질것 같은데 defineModel을 사용하지 않는 이유가 따로 있는것일까요?
Answer 2
0
안녕하세요, 말씀하신 건 v-model의 양방향 바인딩 기능을 얘기하시는 것 같네요. Vue 3에서 표현이 defineModel이지만 실제로는 아래 내용입니다.
https://joshua1988.github.io/web-development/vuejs/v-model-usage/
요건 첫 강의부터 아시기에는 다소 복잡한 개념이라고 생각해서 이후 강의들에 컴포넌트 디자인 패턴이라는 주제로 설명하고 있습니다 :)
0
안녕하세요, 인프런 AI 인턴입니다.
Vue 3에서는 Composition API를 도입하면서 defineProps, defineEmit, 그리고 Vue 2에서의 v-model 대응으로 defineModel 같은 명칭도 사용되기도 했습니다. 그러나 정식 Vue 3 문서에서 defineModel이라는 API는 언급되지 않습니다. 대신, Vue 3에서는 v-model을 사용하여 양방향 바인딩을 구현할 수 있으며, 이는 내부적으로 부모 컴포넌트에서 자식 컴포넌트로 props를 전달하고, 자식 컴포넌트에서 발생한 이벤트를 emit을 통해 부모 컴포넌트로 알리는 방식으로 작동합니다.
보통 v-model을 사용할 때는, 자식 컴포넌트에서 props로 받은 값을 직접 수정하기보다는 수정 가능한 로컬 데이터를 만들고, 로컬 데이터를 통해 부모에게 변경 사항을 $emit으로 전달합니다. 이런 방식은 v-model에 의해 자동으로 처리되기 때문에, 개발자는 명시적으로 props와 emit을 정의하지 않고도 양방향 바인딩을 쉽게 구현할 수 있습니다.
단, v-model을 사용한 양방향 바인딩은 직관적이지만, 복잡한 양방향 데이터 흐름에서는 추적과 디버깅이 어려울 수 있습니다. 따라서 특정 상황에서는 명시적으로 props와 emit을 사용하여 부모-자식 간 데이터 흐름을 컨트롤 하는 것이 더 명확하고 관리하기 쉬울 수 있습니다.
defineModel을 사용하지 않는 이유는 공식적으로 Vue 3에서는 해당 API가 존재하지 않으며, v-model을 사용한 양방향 바인딩은 props와 emit의 조합을 통해 이미 구현 가능하기 때문일 것입니다. defineProps와 defineEmit은 Composition API에서 각각 props와 이벤트 이밋을 위한 API입니다.
파일 생성 방법이 다른건가요?
0
37
1
개발 환경부터 만들고 싶은데 강의에 생략된건가요?
0
52
1
타입스크립트
0
45
1
Vue3에 대해
0
69
1
로컬이 안뜹니다..
0
108
1
Vue 개발자도구 timeline에 No events라 뜨는 문제
0
156
1
Parsing 오류
0
140
1
users 안 보임
0
154
1
vbc 단축키 질문
0
155
2
LEARN-VUE-JS 프로젝트 질문
1
242
1
yarn serve 를 실행하기 위한 조건이 있을까요?
0
436
1
volar(vue language features) 검색 안됨
0
868
3
안녕하세요 선생님 Event Emit 질문 드립니다.
2
425
1
다음 강의
1
270
2
같은 레벨 자식에서의 이벤트 핸들링 방법 문의
1
303
3
vue 개발자도구 refresh event 문제
1
533
2
vue 개발자도구에서의 timeline
1
513
2
target[prop] 질문
1
336
2
Vue 개발자 도구가 변경사항이 있나요?
2
976
2
윈도우 터미널에서 powershell 사용 비추 이유
1
638
2
파일이름을 소문자로시작하는건 어떤경우인가요
1
244
1
v-if, v-show 어떤 경우에 사용하나요?
1
488
2
학생할인 쿠폰번호 오류
1
468
2
클래스,아이디 바인딩 사용문의
1
198
2

