vue3使用provide和inject传递异步请求数据子组件接收不到

前言

一般接口返回的格式是数组或对象,使用reactive定义共享变量

父组件传递

javascript 复制代码
const data = reactive([])

// 使用settimout模拟接口返回
setTimeout(() => {
  // 将接口返回的数据赋值给变量
  Object.assign(data, [{ id: 10000 }])
}, 3000);

provide('shareData', data);// 这行代码也不用写在异步请求回调里,我一般放在js代码最底部

子组件接收

html 复制代码
<template>
  {{ receiveData }}
</template>

<script lang="ts" setup>
import { inject } from 'vue';

const receiveData = inject('shareData')
console.log(receiveData );// 这个位置打印时取不到最新的数据,直接在html代码里使用,会有数据


// 如果想在js中处理后使用,加个watch监听,采用深度监听deep:true
watch(() => receiveData, (res) => {
  console.log(res);
  // TODO处理数据
}, { deep: true })

</script>

可以看到子组件模板中先显示初始值,待接口返回后更新为最新值

相关推荐
czc13125 分钟前
4K QPS 博客社区:CCBlog 全栈开源,Springboot项目实战,Docker一键部署
spring boot·redis·docker·开源·vue·rabbitmq
雨雨雨雨雨别下啦4 小时前
【从0开始学前端】vue3路由,Pinia,组件通信
前端·vue.js·vue
灵犀坠10 小时前
前端知识体系全景:从跨域到性能优化的核心要点解析
前端·javascript·vue.js·性能优化·uni-app·vue
王兆龙16811 小时前
简易版增删改查
前端·vscode·vue
AI3D_WebEngineer1 天前
企业级业务平台项目设计、架构、业务全解之平台篇
前端·javascript·vue
我叫张小白。1 天前
Vue3 Hooks:逻辑复用的解决方案
前端·javascript·vue.js·前端框架·vue
韩立学长1 天前
【开题答辩实录分享】以《咸阳市中华传统文化在线学习平台设计与实现》为例进行答辩实录分享
spring boot·vue
Json____1 天前
vue2-数码购物商城-前端静态网站
前端·vue·数码商城
Darenm1111 天前
Vue Router 路由管理
python·vue
by__csdn2 天前
Vue 2 与 Vue 3:深度解析与对比
前端·javascript·vue.js·typescript·vue·css3·html5