부모에서 자식으로 데이터 전달
부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하기 위해 props를 사용합니다.
ParentComponent.vue
<template>
<div>
<ChildComponent :message="parentMessage" />
</div>
</template>
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const parentMessage = ref('Hello from Parent!');
</script>
ChildComponent.vue
<template>
</template>
<script setup>
import { defineProps } from 'vue';
const props = defineProps({
message: String
});
console.log(props.message);
</script>
자식에서 부모로 데이터 전달
자식 컴포넌트에서 부모 컴포넌트로 데이터를 전달하기 위해 emit을 사용합니다.
ChildComponent.vue
<template>
<button @click="sendMessage">Send Message to Parent</button>
</template>
<script setup>
import { defineEmits } from 'vue';
const emit = defineEmits(['updateMessage']);
function sendMessage() {
emit('updateMessage', 'Hello from Child!');
}
</script>
ParentComponent.vue
<template>
<div>
<ChildComponent @updateMessage="receiveMessage" />
<p>{{ childMessage }}</p>
</div>
</template>
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const childMessage = ref('');
function receiveMessage(message) {
childMessage.value = message;
}
</script>
위 예제에서는 부모 컴포넌트에서 자식 컴포넌트로 메시지를 props를 통해 전달하고,
자식 컴포넌트에서 부모 컴포넌트로 메시지를 emit을 통해 전달합니다.
props와 emit을 함께 사용하여 부모와 자식 컴포넌트 간의 데이터를 효과적으로 주고받을 수 있습니다.
그러면 :message @updateMessage 이 두가지의 차이점은 무엇일까 ?
Vue 3에서 @updateMessage와 :message를 사용하는 이유는 각각의 역할이 다르기 때문입니다.
이들은 Vue의 데이터 흐름과 이벤트 시스템을 활용하여 부모와 자식 컴포넌트 간의 데이터를 주고받는 방법입니다.
- :message (Props 바인딩):
- :message는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 때 사용됩니다. 여기서 :는 v-bind의 약어로, 부모 컴포넌트의 데이터를 자식 컴포넌트의 props로 바인딩하는 역할을 합니다.
- 예를 들어, 부모 컴포넌트에서 message라는 데이터를 자식 컴포넌트로 전달하려면 <ChildComponent :message="parentMessage" />와 같이 사용합니다. 이 경우, parentMessage의 값이 자식 컴포넌트의 props로 전달됩니다.
- @updateMessage (이벤트 리스너):
- @updateMessage는 자식 컴포넌트에서 부모 컴포넌트로 데이터를 전달할 때 사용됩니다. 여기서 @는 v-on의 약어로, 자식 컴포넌트에서 발생한 이벤트를 부모 컴포넌트에서 수신하여 처리하는 역할을 합니다.
- 자식 컴포넌트에서 this.$emit('updateMessage', data)와 같이 이벤트를 발생시키면, 부모 컴포넌트는 <ChildComponent @updateMessage="handleUpdate" />와 같이 이벤트 리스너를 설정하여 해당 이벤트를 처리할 수 있습니다.
이러한 방식으로 Vue에서는 단방향 데이터 흐름을 유지하면서 컴포넌트 간의 데이터를 효율적으로 주고받을 수 있습니다.
'프로그래밍 > Js' 카테고리의 다른 글
제네레이터(generator) 의 실무 적용 (0) | 2024.08.23 |
---|---|
이기종간 데이터 변환(한글) 전문에 한글 전송 방법 (0) | 2024.08.22 |
vue3 pinia 메모리 누수 증가 개선코드 (0) | 2024.08.02 |
Vue 3에서 mitt를 사용하여 이벤트 핸들러 중복 실행 방지하기 (0) | 2024.06.13 |
[vue3] Vue3 프로젝트에서 웹과 모바일 연동 문제 해결 emitter 문제 (0) | 2024.05.29 |