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>

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

相关推荐
悟道书生15 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
mewowaBc15 小时前
使用Pinia持久化存储实现用户认证系统
vue·pinia·用户认证系统
gc_22992 天前
使用VS Code终端创建Vue项目报错:“npm : 无法加载文件 ...\npm.ps1,因为在此系统上禁止运行脚本”
vue·vs code
小阿鑫2 天前
尤雨溪 : Vue 4 已经在规划中了!
vue·vite·vite+·程序员海军·vue4
离歌漠2 天前
《我用 Tauri 做了一个本地开发工具箱》
rust·typescript·vue
enjoy编程3 天前
playwright学习-I
typescript·vue·nodejs·1024程序员节·playwright
落花看风雪5 天前
从零开始搭建后台系统(vue3+TypeScript+Vite)01
typescript·vue·js
那年那棵树9 天前
基于WebGis的人生如旅地图系统
前端·arcgis·vue·课程设计
冒险的豆子13 天前
Vue2 、Vue3 响应式对比及优劣
vue
NetX行者13 天前
用 Vite + Vue3 + UnoCSS 搭建企业级项目模板(一):基础骨架
vue·vite·unocss