vue3组件间通信的方式
创始人
2025-05-31 05:21:03

在使用vue时,我们经常会把不同的模块拆分成不同的组件,而组件之间有的需要传递数据,所以组件间的数据通信就非常重要了。

而在vue中,组件之间的关系大致可以分为以下两种:

  • 父子组件之间通信

  • 非父子组件之间通信(兄弟组件、祖孙组件等)

  1. props/$emit

对于父子组件通信而言,最简单的方式就是 利用 props。 父组件可以通过props的方式向子组件传递数据,而子组件通过$emit可以向父组件通信。

父组件:

子组件:

利用props将父组件数据传递给子组件
注意点:
1、props只可以从上一级组件传递到下一级组件(即父子组件),即所谓的单向数据流。【如有需要,可以通过data属性接收或使用computed属性进行转换】
2、props只读,不可被修改,所有修改都会失效并警告。
子组件想将数据传递给父组件时,使用 $emit触发自定义事件,父组件使用v-on(缩写为@)来监听事件

  1. refs

父组件获取子组件的属性或者调用子组件方法

子组件:

父组件:


3. provide/inject

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

provide:提供一个值,可以被后代组件注入

inject: 注入一个由祖先组件或整个应用提供的值

父组件:

子组件:

4. eventBus

eventBus,又称事件总线,其原理就是 事件订阅发布。在vue中可以使用它来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以通知其他组件。

但是vue3中移除了eventBus,但是可以借助第三方工具,如mitt来实现。其原理还是eventBus

使用步骤:

安装:
cnpm i mitt -S

封装:

import mitt from 'mitt'
const mitt = mitt()
export default mitt

使用:

组件1:

组件2:

5. vuex/Pinia

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

相关内容

热门资讯

年味拉满!仙游“红”装启新,木... 花很温柔,茶很香醇。你很特别,我很喜欢。导语春节的脚步悄然临近,仙游已正式开启“新春加载模式”,换上...
赶大集|购年货、看秧歌!长春乐... 新华社长春2月14日电(记者唐铭泽)“新杀的猪肉来喽!”一声洪亮吆喝刚落,伴着“砰”的闷响,一扇鲜猪...
(新春走基层)杭州西湖游船“宋... 中新网杭州2月14日电(曹丹)春节临近,年味渐浓。2月14日,杭州西湖碧波荡漾,五公园码头旁,“饮湖...
到黔东南过年|快进慢游,条条大... 兴隆街乡村振兴工作队积极向帮扶单位请示汇报,得到了单位领导的高度重视和鼎力支持,促成了15万元重安城...
荔波小七孔到肇兴侗寨,大巴还是... 荔波小七孔到肇兴侗寨,大巴还是包车?本地人给你最实在的交通攻略! 刚从荔波小七孔的碧水古桥间回过神来...