Загрузка...
Загрузка...
Продолжая работу с платформой, вы принимаете условия Политики конфиденциальности и использование файлов cookie.
Разбираем разницу между props и emit в Vue.js и как эффективно передавать данные между компонентами.
В Vue.js props и emit играют ключевые роли в передаче данных между компонентами, но выполняют противоположные задачи:
props позволяют передавать данные от родителя к дочернему компоненту.emit используется для передачи данных от дочернего компонента к родительскому через события.Props позволяют родительскому компоненту передавать данные дочернему. Эти данные нельзя изменять внутри дочернего компонента.
Пример использования props:
<script setup>
defineProps(['message']);
</script>
<template>
<p>Сообщение: {{ message }}</p>
</template>
Родительский компонент:
<template>
<ChildComponent message="Привет, Vue!" />
</template>
message передается в ChildComponent, но внутри него оно остается неизменяемым.Когда дочерний компонент должен отправить данные родителю, используется emit. Это удобно, например, при обработке событий кнопок или ввода.
Пример использования emit:
Дочерний компонент:
<script setup>
import { defineEmits } from 'vue';
const emit = defineEmits(['updateMessage']);
</script>
<template>
<button @click="emit('updateMessage', 'Новое сообщение')">Изменить сообщение</button>
</template>
Родительский компонент:
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
const message = ref('Начальное сообщение');
</script>
<template>
<p>Сообщение: {{ message }}</p>
<ChildComponent @updateMessage="(newMsg) => message = newMsg" />
</template>
message в родительский компонент.Если требуется синхронизировать данные между родительским и дочерним компонентами, используется 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 удобен для двустороннего связывания данных.Правильное понимание этих механизмов делает код более структурированным и управляемым!