inflearn logo
강의

Course

Instructor

Getting Started with Vue 3

Introduction to Event Emit

defineProps, defineEmit, defineModel 차이

759

juregon2

2 asked

1

부모와 자식 컴포넌트간의 데이터 교환에 있어

부모 -> 자식 : props
자식 -> 부모 : emit
이라는건 어느정도 개념이 잡힌 것 같습니다.

 

근데, 좀 더 찾아보니 부모자식 컴포넌트 사이에도 model을 지정해서 양방향 바인딩이 가능하다는 예제를 본 것 같습니다.

 

model을 사용하여 props & emit을 대체한다면 복잡한 코드가 좀 더 나아질것 같은데 defineModel을 사용하지 않는 이유가 따로 있는것일까요?

 

javascript vue.js vue-3

Answer 2

0

captain

안녕하세요, 말씀하신 건 v-model의 양방향 바인딩 기능을 얘기하시는 것 같네요. Vue 3에서 표현이 defineModel이지만 실제로는 아래 내용입니다.

https://joshua1988.github.io/web-development/vuejs/v-model-usage/

요건 첫 강의부터 아시기에는 다소 복잡한 개념이라고 생각해서 이후 강의들에 컴포넌트 디자인 패턴이라는 주제로 설명하고 있습니다 :)

0

communityai8509

안녕하세요, 인프런 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에 의해 자동으로 처리되기 때문에, 개발자는 명시적으로 propsemit을 정의하지 않고도 양방향 바인딩을 쉽게 구현할 수 있습니다.

단, v-model을 사용한 양방향 바인딩은 직관적이지만, 복잡한 양방향 데이터 흐름에서는 추적과 디버깅이 어려울 수 있습니다. 따라서 특정 상황에서는 명시적으로 propsemit을 사용하여 부모-자식 간 데이터 흐름을 컨트롤 하는 것이 더 명확하고 관리하기 쉬울 수 있습니다.

defineModel을 사용하지 않는 이유는 공식적으로 Vue 3에서는 해당 API가 존재하지 않으며, v-model을 사용한 양방향 바인딩은 propsemit의 조합을 통해 이미 구현 가능하기 때문일 것입니다. definePropsdefineEmit은 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