Vue3中父子如何通信

128 阅读1分钟

组件中的通讯

组件是vue.js强大的功能,好的组件封装可以使代码的复用性更强大,而组件实例的作用域是相互独立的,这就意味着不同组件之间数据无法相互引用。

组件的传递数据方向不同来区分为,父传子子传父

父传子

基本思想

  1. 父组件中给子组件绑定属性
  2. 子组件内部通过props选项接收数据

使用defineProps,可直接使用,无需引用 image.png

子传父

基本思想

  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过 emit 方法触发事件
    1. const emit = defineEmits(['事件名1', '事件名2'])
    2. emit('事件名1', 值1)

使用defineEmits,可直接使用,无需引用 image.png

provide和inject

provide和inject组件传值,一般用在隔代传值,比如祖父组件传值给孙子组件。适用场景如图

1688045838643.jpg

跨层传递普通数据

实现步骤

  1. 顶层组件通过 provide 函数提供数据
  2. 底层组件通过 inject 函数提供数据

image.png

跨层传递响应式数据

在调用provide函数时,第二个参数设置为ref对象

跨层传递方法

顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据

provide和inject总结

provideinject的作用主要是跨层组件通讯。

底层组件想要修改顶层组件的数据,从顶层组件传递方法,在底层组件调用方法