vue3 provide 和 inject 底层组件的值不是响应式的处理

1.普通传值
传递普通值,直接父级

provide(/* 注入名 / ‘message’, / 值 */ ‘hello!’)
子级:

const message = inject(‘message’)
2.通过axios异步获取数据后传值
问题:在项目中一般是通过接口请求到数据后再传递给子级,provide和inject如果直接再调用接口的方法内传值会报警告,而且值也传递不过去。就是说provide()必须在setup根节点处才能使用,在方法里面用是不行的

但是,直接在setup根节点处传递,由于数据是异步获取的,直接传递时数据是还没有值的,传递过去的都是声明时的初始值。

解决:使用方法包装需要传递的值,然后provide()传递过去的是方法,inject()时通过方法调用获取值

父级:

const provideData = () =>{
return {
columns: columns.value,
data: resourceData.value,
pageNum: pageNum.value,
total: total.value,
pageSize: pageSize.value
}
}
provide(‘provideData’,provideData);
子级获取:

const provideData = inject(‘provideData’);
const columns = provideData().columns;
const data = provideData().data;
const total = provideData().total;
const pageNum = provideData().pageNum;
const pageSize = provideData().pageSize;
3.父组件值更改后,子组件的值不具备响应性
vue本身就是这样设计的,注入后子组件的值不具有响应性,但是我们可以进行处理

3.1以方法形式传递值
const provideData = () =>{
return {
columns: ()=>columns.value,
data: ()=>resourceData.value,
pageNum: ()=>pageNum.value,
total: ()=>total.value,
pageSize: ()=>pageSize.value
}
}
provide(‘provideData’,provideData);
子组件中再通过方法进行调用:

const provideData = inject(‘provideData’);
const columns = computed(() => provideData().columns())
const data = computed(() => provideData().data())
const total = computed(() => provideData().total())
const pageNum = computed(() => provideData().pageNum())
const pageSize = computed(() => provideData().pageSize())
3.2以对象形式传递值
父组件:

const provideData = () =>{
return {
data:{
columns: columns.value,
data: resourceData.value,
pageNum: pageNum.value,
total: total.value,
pageSize: pageSize.value
}
}
}
provide(‘provideData’,provideData);
子组件:

const provideData = inject(‘provideData’);
const columns = computed(() => provideData().data.columns)
const data = computed(() => provideData().data.data)
const total = computed(() => provideData().data.total)
const pageNum = computed(() => provideData().data.pageNum)
const pageSize = computed(() => provideData().data.pageSize)
————————————————
这里感谢 Jyann博主的文章给予的帮助,在这里贴上链接,里面的内容更加的全面,大家有相关问题可以查阅原文链接:https://blog.csdn.net/qq_34569497/article/details/129751537

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值