моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Vue 3 представляет Composition API, который обеспечивает новую гибкость и мощь взаимодействия компонентов.
При фронтенд-разработке компоненты можно рассматривать как независимые единицы, которые создают пользовательский интерфейс. Он инкапсулирует определенные функции и стили, может использоваться повторно, разрабатываться и тестироваться независимо от других частей. Основная функция компонентов — улучшение возможности повторного использования кода, удобства сопровождения и масштабируемости. Разделив интерфейс на несколько компонентов, разработчики могут легче управлять сложными приложениями, а каждый компонент можно оптимизировать для повышения общей эффективности разработки и производительности приложений.
В интерфейсных фреймворках, таких как Vue.js, компоненты могут быть вложены в дерево компонентов. В этой древовидной структуре каждый компонент может иметь подкомпоненты, и эти подкомпоненты могут иметь свои собственные подкомпоненты, образуя иерархическую структуру. Такая структура делает взаимосвязь между компонентами понятной и облегчает управление и обслуживание.
Концепции деревьев компонентов и отношений родительских и дочерних компонентов имеют решающее значение для понимания взаимодействия компонентов. Освоение этих базовых знаний может помочь разработчикам более эффективно проектировать и реализовывать механизмы связи между компонентами.
Что такое реквизит
Props — это механизм, позволяющий родительским компонентам передавать данные дочерним компонентам.В Vue 3 используйтеdefineProps
API используется для объявления получения реквизитов, что поддерживает односторонний поток данных и обеспечивает независимость и возможность повторного использования компонентов.
Как передать реквизит в родительский компонент
В шаблоне родительского компонента используйтеv-bind
или аббревиатура:
Чтобы привязать данные:
- <template>
- <ChildComponent :my-prop="parentData" />
- </template>
здесь,:my-prop
Указывает, что это динамически связанный реквизит,parentData
Определены ли данные в родительском компоненте?。
Как получить реквизиты в дочернем компоненте
В дочернем компоненте используйтеdefineProps
Чтобы объявить полученные реквизиты:
- <script setup>
- import { defineProps } from 'vue';
-
- const props = defineProps({
- myProp: String
- });
- </script>
существовать<script setup>
В синтаксическом сахареdefineProps
Автоматически отображает реквизиты как адаптивные свойства компонента.。
что такое выброс
Emit — это механизм, позволяющий дочерним компонентам отправлять сообщения родительским компонентам.В Vue 3 используйтеdefineEmits
API для объявления событий, которые могут быть созданы, и использованияemit
функция для запуска событий.
Как вызвать событие в дочернем компоненте
В методе дочернего компонента используйте defineEmits
объявлять события, которые могут быть созданы, и использовать emit
для запуска:
- <script setup>
- import { defineEmits } from 'vue';
-
- const emit = defineEmits(['my-event']);
-
- function triggerEvent() {
- emit('my-event', dataToPass);
- }
- </script>
defineEmits
используется для объявления событий, которые может генерировать компонент, аemit
Функции используются для запуска этих событий.
Как прослушивать события дочернего компонента в родительском компоненте
В шаблоне родительского компонентаиспользоватьv-on
или аббревиатура@
Чтобы прослушивать события, создаваемые дочерними компонентами:
- <template>
- <ChildComponent @my-event="handleEvent" />
- //或者<ChildComponent v-on:my-event="handleEvent" />
- </template>
здесь,@my-event
Указывает, что подкомпонент прослушивания излучаетmy-event
событие,handleEvent
Это метод, определенный в родительском компоненте. Когда событие сработает, этот метод будет вызван.
Предположим, что есть родительский компонентParentComponent
и подкомпонентChildComponent
родительский компонент должен передать данные дочернему компоненту, а дочерний компонент должен уведомить родительский компонент после определенной операции.
родительский компонентParentComponent.vue
- <template>
- <ChildComponent :my-prop="parentData" @child-event="handleChildEvent" />
- </template>
-
- <script setup>
- import { ref } from 'vue';
- import ChildComponent from './ChildComponent.vue';
-
- const parentData = ref('initial data');
- const handleChildEvent = (data) => {
- console.log('Received data from child:', data);
- };
- </script>
ПодсборкаChildComponent.vue
- <template>
- <button @click="sendDataToParent">Send Data to Parent</button>
- </template>
-
- <script setup>
- import { defineProps, defineEmits } from 'vue';
-
- const props = defineProps({
- myProp: String
- });
-
- const emit = defineEmits(['child-event']);
-
- function sendDataToParent() {
- emit('child-event', props.myProp);
- }
- </script>
В этом примере родительский компонент передает:my-prop
Передайте данные дочерним компонентам и передайте@child-event
Слушайте события, создаваемые дочерними компонентами.проходы дочерних компонентовdefineProps
Получает содержимое, переданное родительским компонентомmyProp
и используйте его в событии нажатия кнопкиemit
Отправьте данные в родительский компонент.
Pinia — это официально рекомендуемая библиотека управления состоянием для Vue 3. Она обеспечивает компонентный способ управления состоянием приложения. Вот некоторые из ключевых преимуществ и особенностей Pinia:
Чтобы начать использовать Pinia, сначала необходимо установить Pinia:
npm install pinia
Или используйте Пряжу:
yarn add pinia
Затем настройте Pinia в своем приложении Vue:
- import { createPinia } from 'pinia';
-
- const pinia = createPinia();
- app.use(pinia);
Создайте магазин:
- import { defineStore } from 'pinia';
-
- export const useCounterStore = defineStore('counter', () => {
- const count = ref(0);
-
- function increment() {
- count.value++;
- }
-
- return { count, increment };
- });
Использовать магазин в компоненте:
- <script setup>
- import { useCounterStore } from '@/stores/counter';
-
- const counterStore = useCounterStore();
- </script>
-
- <template>
- <div>
- <p>Count: {{ counterStore.count }}</p>
- <button @click="counterStore.increment">Increment</button>
- </div>
- </template>
Интеграция Pinia с компонентами очень проста, в основном черезdefineStore
функция для создания магазина. В компонентах вы можете напрямую использовать состояние и методы в магазине:
- <template>
- <div>
- <p>Count: {{ count }}</p>
- <button @click="increment">Increment</button>
- </div>
- </template>
-
- <script setup>
- import { useCounterStore } from '@/stores/counter';
-
-
- const counterStore = useCounterStore();
- const { count, increment } = storeToRefs(counterStore);
- //如果这里不使用storeToRefs会丢失响应式特性
- </script>
В приведенном выше примере мы получаем доступ непосредственно в шаблоне.count
для отображения значения счетчика и вызова его в событии нажатия кнопкиincrement
Метод увеличения значения счетчика.
Базовое использование Provide/Inject
В Вью 3,provide
иinject
Это метод связи между родительскими и дочерними компонентами, который позволяет компоненту-предку внедрить зависимость во все его компоненты-потомки, независимо от глубины иерархии компонентов.
provide
Функции предоставляют данные.inject
Функция вводит данные.Применимые сценарии для предоставления/внедренияprovide
иinject
Применимо к следующим сценариям:
props
при передаче данных.Образец кода:
- // 祖先组件
- export default {
- setup() {
- const message = 'Hello from Ancestor!';
- provide('message', message);
- }
- }
-
- // 子孙组件
- export default {
- setup() {
- const message = inject('message');
- return { message };
- }
- }
Концепция и использование ТелепортаTeleport
Это новый встроенный компонент, добавленный в Vue 3, который позволяет «передавать» часть шаблона внутри компонента в любое другое место в DOM.
Как использовать Teleport для связи компонентовTeleport
Он используется не для связи между компонентами, а для управления положением рендеринга компонентов.но ты можешь использоватьTeleport
Особый метод связи достигается путем рендеринга частей компонента в DOM родительского компонента.
Образец кода:
- <!-- 父组件 -->
- <template>
- <div>
- <Teleport to="body">
- <ChildComponent />
- </Teleport>
- </div>
- </template>
-
- <!-- 子组件 -->
- <template>
- <div>Some content</div>
- </template>
Введение в API композиции
Vue 3 представляет API композиции, который предоставляет новый способ организации и повторного использования логики.проходитьsetup
Функции позволяют разработчикам более гибко контролировать состояние реагирования и жизненный цикл компонентов.
Используйте ref и reactive для межкомпонентного взаимодействия.ref
иreactive
Это инструмент API композиции для создания адаптивных данных.
ref
Реактивные ссылки для создания базовых типов данных.reactive
Реактивная ссылка для создания типов объектов.Использование предоставления и внедрения в Composition API
В API композицииprovide
иinject
допустимыйsetup
Используется в функциях для обеспечения межкомпонентной связи.
Образец кода:
- // 祖先组件
- import { provide } from 'vue';
-
- export default {
- setup() {
- const message = ref('Hello from Ancestor!');
- provide('message', message);
- }
- }
-
- // 子孙组件
- import { inject } from 'vue';
-
- export default {
- setup() {
- const message = inject('message');
- return { message };
- }
- }
Благодаря этим уникальным методам связи Vue 3 разработчики могут более гибко организовывать связь между компонентами и улучшать удобство сопровождения и возможность повторного использования кода.
Vue 3 представляет Composition API, который обеспечивает новую гибкость и мощные функции для взаимодействия компонентов. Взаимодействие компонентов является ключом к созданию сложных пользовательских интерфейсов в интерфейсной разработке. Оно включает в себя передачу данных и запуск событий между родительскими и дочерними компонентами, родственными компонентами, а также компонентами-предками и потомками. Vue 3 предоставляет множество методов связи, включая традиционные реквизиты и отправку, а также новый API Provide/Inject, Teleport и Composition.
Творить непросто. Если эта статья вам поможет, можете ли вы поставить мне лайк?