728x90
반응형
1. 이벤트 에미터(Event Emitter)란?
Vue에서 이벤트 에미터는 자식 컴포넌트에서 부모 컴포넌트로 데이터를 전달하기 위해 사용하는 메커니즘임.
자식 컴포넌트가 특정 이벤트를 발생($emit)시키고, 부모 컴포넌트는 해당 이벤트를 수신(v-on 혹은 @)하여 처리하는 방식임.
이벤트 에미터는 주로 사용자 입력, 폼 제출, 상태 변경과 같은 이벤트를 부모 컴포넌트에 전달할 때 사용됨.
2. 기본적인 이벤트 에미터 사용 예제
// 부모 컴포넌트 (Parent.vue)
<template>
<div>
<ChildComponent @increment="handleIncrement" />
<p>카운트: {{ count }}</p>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
data() {
return {
count: 0,
};
},
methods: {
handleIncrement(value) {
this.count += value;
},
},
components: { ChildComponent }
};
</script>
// 자식 컴포넌트 (ChildComponent.vue)
<template>
<button @click="emitIncrement">증가</button>
</template>
<script>
export default {
methods: {
emitIncrement() {
this.$emit('increment', 1); // 'increment' 이벤트 발생, 데이터 전달
}
}
};
</script>
설명:
- 자식 컴포넌트에서 $emit('increment', 1)으로 이벤트와 데이터를 부모로 전달.
- 부모 컴포넌트는 @increment로 이벤트를 수신하고 handleIncrement 메서드를 실행하여 count 값을 증가시킴.
3. 이벤트 에미터로 상태 전달하기
이벤트 에미터는 자식 컴포넌트가 상태 변경을 부모 컴포넌트에 알릴 때도 유용함. 특히, 폼 데이터나 사용자 상호작용을 부모에게 전달하는데 자주 사용됨.
// 부모 컴포넌트 (Parent.vue)
<template>
<div>
<FormComponent @submit="handleFormSubmit" />
<p>제출된 데이터: {{ submittedData }}</p>
</div>
</template>
<script>
import FormComponent from './FormComponent.vue';
export default {
data() {
return {
submittedData: {},
};
},
methods: {
handleFormSubmit(data) {
this.submittedData = data;
}
},
components: { FormComponent }
};
</script>
// 자식 컴포넌트 (FormComponent.vue)
<template>
<button @click="submitForm">폼 제출</button>
</template>
<script>
export default {
methods: {
submitForm() {
const data = { name: '홍길동', age: 30 };
this.$emit('submit', data); // 부모로 데이터 전달
}
}
};
</script>
4. 이벤트 에미터와 유효성 검증
Vue 3에서는 emits 옵션을 사용해 이벤트의 유효성 검증이 가능함. 이를 통해 올바르지 않은 이벤트 발생을 사전에 방지할 수 있음.
유효성 검증 예제:
export default {
emits: {
submit: (data) => {
return data && data.name && data.age > 0; // 데이터 검증
}
},
methods: {
submitForm() {
const data = { name: '홍길동', age: 30 };
this.$emit('submit', data);
}
}
};
설명:
- emits 옵션을 통해 이벤트와 데이터의 유효성을 검증.
- 유효성 검증을 통과하지 못하면 이벤트가 발생하지 않음.
5. 이벤트 에미터와 부모-자식 간 소통의 장점
- 단방향 데이터 흐름 유지: Vue의 데이터 흐름은 부모 → 자식으로 단방향임. 하지만 이벤트 에미터를 통해 자식이 부모에게 데이터를 전달할 수 있음.
- 컴포넌트 간의 느슨한 결합: 이벤트를 통해 컴포넌트 간에 직접적인 의존성을 줄이고 유지보수를 용이하게 함.
- 명확한 이벤트 처리: 부모 컴포넌트에서 명시적으로 이벤트를 수신하고 처리함으로써 코드의 가독성을 높임.
728x90
반응형
'Web Development > vue' 카테고리의 다른 글
Composition API (0) | 2024.10.12 |
---|---|
Composition API vs Option API (0) | 2024.10.12 |
[콜럼Vue스] 사용자 정의 이벤트 (1) | 2024.10.12 |
[콜럼Vue스] 속성 (0) | 2024.10.12 |
[콜럼Vue스] 속성 (0) | 2024.10.12 |