Vue3中常用的组件通信方式

本文详细介绍了Vue.js中组件间的几种重要通信方式,包括props用于父组件向子组件传递数据,emit用于子组件向父组件发送事件,v-model简化数据绑定,以及状态管理工具vuex/pinia和provide/inject的使用。此外,尽管Vue3官方移除eventBus,但仍推荐第三方工具如mitt进行事件总线处理。
摘要由CSDN通过智能技术生成

目录

props

emit

v-model

vuex/pinia

provide/inject

eventBus


1.props

父组件以数据绑定的形式声明要传递的数据,子组件通过defineProperty()方法创建props对象,即可拿到父组件传来的数据

父组件中:

<child-components :list="list"></child-components>

子组件中:

<template>
  <ul>
    <li v-for="index in props.list" :key="index">{{ index }}</li>
  </ul>
</template>
<script setup>
import { defineProps } from 'vue'
const props = defineProps({
  list: {
    type: Array,
    default: () => [],
  },
})
</script>

2.emit

emit是子传父

父组件中:

<child-components @add="handleAdd"></child-components>
<script>
 const list = ref([1,2,3])
 const handleAdd = value => {
  list.value.push(value)
}
</script>

子组件中:

const emits = defineEmits(['add'])
emits('add', 1)

3.v-model

v-model不能严格成为数据的传递方式,其实只是减少了代码量

父组件中:

<ChildComponent v-model:list="list" />
// 等价于
<ChildComponent :list="pageTitle" @update:list="list = $event" />

子组件中:

const emits = defineEmits(['update:list'])
emits('update:list', arr)

子组件需要emit一个叫update:xxx的事件,再把需要更新的响应式数据传给emit方法的第二个参数即可

4.vuex/pinia

Vuex 和 Pinia 是 Vue 3 中的状态管理工具,使用这两个工具可以轻松实现组件通信

5.provide/inject

provide/inject是 Vue 中提供的一对 API,无论层级多深,API 都可以实现父组件到子孙组件的数据传递

// 父组件中
provide('list', list.value)

// 子组件中
const list = inject('list')

6.eventBus

Vue 3 中移除了 eventBus,但可以借助第三方工具来完成。Vue 官方推荐使用 mitt 或 tiny-emitter

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值