Як ефективно передавати дані між компонентми?
Розуміння різниці між props та emit у Vue.js та як ефективно передавати дані між компонентми.
Різниця між props та emit
У Vue.js props та emit відіграють ключову роль у передачі даних між компонентми, але виконують протилежні завдання:
propsдозволяють передавати дані від батьківського до дочірнього компонент.emitвикористовується для передачі даних від дочірнього компонент до батьківського через події.
Як працюють props?
Props дозволяють батьківському компоненту передавати дані дочірньому. Ці дані не можуть бути змінені всередині дочірнього компонент.
Приклад використання Props:
<script setup>
defineProps(['message']);
</script>
<template>
<p>Message: {{ message }}</p>
</template>Батьківський компонент:
<template>
<ChildComponent message="Hello, Vue!" />
</template>messageпередається доChildComponent, але всередині нього залишається незмінним.
Як працює emit?
Коли дочірньому компоненту потрібно надіслати дані батьківському, використовується emit. Це зручно, наприклад, при обробці подій кнопок або вводу.
Приклад використання emit:
Дочірній компонент:
<script setup>
import { defineEmits } from 'vue';
const emit = defineEmits(['updateMessage']);
</script>
<template>
<button @click="emit('updateMessage', 'New message')">Change message</button>
</template>Батьківський компонент:
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const message = ref('Initial message');
</script>
<template>
<p>Message: {{ message }}</p>
<ChildComponent @updateMessage="(newMsg) => message = newMsg" />
</template>- Тут дочірній компонент надсилає нове значення
messageдо батьківського компонент.
v-model
Якщо потрібно синхронізувати дані між батьківським та дочірніми компонентми, використовується v-model.
Батьківський компонент:
<ChildComponent v-model="parentMessage" />Дочірній компонент:
<script setup>
defineProps(['modelValue']);
const emit = defineEmits(['update:modelValue']);
</script>
<template>
<input :value="modelValue" @input="emit('update:modelValue', $event.target.value)" />
</template>- Тепер
parentMessageбуде оновлюватися, коли значення змінюється вChildComponent.
Коли використовувати props, emit та v-model?
| Що потрібно зробити? | Що використовувати? |
|---|---|
| Передати дані від батька до дитини | props |
| Надіслати подію від дитини до батька | emit |
| Двостороннє зв'язування даних | v-model |
Підсумок
propsвикористовуються для передачі даних вниз по ієрархії компонентів.emitдозволяє дочірнім компонентм надсилати дані батькам.v-modelзручний для двостороннього зв'язування даних.
Правильне розуміння цих механізмів робить код більш структурованим та керованим!
Зміст
Різниця між props та emitЯк працюють props?Як працює emit?v-modelКоли використовувати props, emit та v-model?Підсумок
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.