부모 -> 자식 : props
자식 -> 부모 : emit
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법
// 자식 코드에서는... props 속성을 정의
export default {
props:{
message: String,
count:{
type: Number,
required: false,
default: 0,
}
}
}
알아두면 좋을 것들...
props 자체는 부모 -> 자식... 단방향으로 전달되는 방식.
자식에서 props를 변경할 수가 X!
-> 강제적으로 수정을 시도를 하면... 에러가 발생...
->자식 컴포넌트에게만 데이터 변경 해당 사항... 부모에게는 전달 x
자식 -> 부모 : 이벤트 발생! 자식 HTML엘리먼트 -> 부모 HTML 엘리먼트...
-> 이벤트를 기반으로 한 통신 방식을 사용!
// 자식
<button @click="sendMessage">메시지 보내기
methods:{
sendMessage(){
this.$emit('이벤트명', 전달데이터);
}
}
//부모
<ChildComponent v-on:이벤트명="핸들러메소드">
methods:{
핸들러메소드(전달받은데이터){
console.log(전달받은데이터);
}
}
알아두면 좋을 것들...
Q. emit 한번으로 조상 컴포넌트에게 데이터를 전달할 수 있는게 아닐까??
A. X, 자바스크립트에서 기본적으로 사용하는 이벤트 처리... -> "글로벌 이벤트 버스"
구성 요소별로 이벤트 버스를 따로 만들어서 둠... "부모 <-> 자식" 이벤트 버스를 각각 따로!
if 자식 -> 부모 -> 부모's 부모... 자식 emit. -> 부모 emit -> 부모's 부모 전달 받음!
가장 헷갈려 하는 것...
정의
props : 상위 컴포넌트 -> 하위 컴포넌트로 데이터 전달
emit : 하위 컴포너트 -> 상위 컴포넌트로 이벤트를 발생
방향
props, emit : 단방향 데이터 흐름
특징
props : 부모 컴포넌트에서 전달 받은 값을 수정x
emit : 자식 컴포넌트에서 이벤트를 발생시켜서 부모 컴포넌트의 이벤트 핸들러 실행
사용