Vue3学习笔记之Provide和Inject

本文探讨Vue3中的Provide和Inject特性,用于解决复杂父子组件间通信问题。通过实例展示如何将数据从父组件传递到深层子孙组件,并讲解如何处理响应式数据,确保当父组件数据变化时,子孙组件能接收到更新。文中还提到,当使用Provide直接绑定data时可能存在非响应式问题,可通过使用Vue3的计算属性来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Provide 和 Inject

基本使用

在这里插入图片描述
在一般的情况下,父组件想要把数据传递给子组件,使用的都是props。但是如果父组件想要把数据传给孙组件甚至更深层级的后代组件,props就会显得十分繁琐,这时候就要用到我们的ProvideInject了。

这里我定义了三个组件,分别是fatherCom,sonCom,grandsonCom
在这里插入图片描述
在父组件里面加上provide,用来定义传给后代组件的数据,孙组件(后代组件)里面添加inject数组,再往数组里面添加相应的变量名,用来接收父组件provide传过来的数据。

页面如下,孙组件正常显示父组件传来的值:
在这里插入图片描述

上面所举的例子只是最简单的,假如我们需要吧父组件data()里面的数据传给孙组件(后代组件)呢?应该怎么做?
在这里插入图片描述
根据官方文档描述,需要把provide写成函数形式,不然无法正确指向this,只有写成provide(),this才会正确的指向当前组件。

如图,页面数据正常渲染:
在这里插入图片描述

处理响应式

在默认的情况下,provide里面的数据并不是响应式的,也就是说如果provide绑定的是data()里面的值,那么data()的值发生改变之后,provide是不会改变的,它里面绑定的一直是初始值。
代码:
在这里插入图片描述
页面:
点击按钮后,fatherData并不会根据testArray的改变而相应新的长度。
在这里插入图片描述
这时候,如果想要让数据相应,就要使用Vue3的计算属性computed对该值进行包裹,这样fatherData就是响应式的了。
代码:
在这里插入图片描述
页面:
我点击了两下按钮,这样数组的长度就是5,此时fatherData数据也做到了响应式,成功的渲染出了数字5。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值