当前位置: 首页 > article >正文

Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案

1、基础用法

父组件:

<script setup>
import { ref, provide } from 'vue';
import ChildComponent from './ChildComponent.vue';
const parentData = ref('初始数据');
// 提供数据
provide('parentData', parentData);
</script>

子组件:

<script setup>
import { inject } from 'vue';
// 注入父组件提供的数据
const parentData = inject('parentData');
</script> 
2、实际应用
基础用法只能满足一般的父子传值,但在实际项目中一般是动态触发事件或通过接口请求到数据后再传递给子级,provide和inject如果直接再调用接口的方法内传值会报警告,而且值也传递不过去。就是说provide()必须在setup根节点处才能使用,直接在方法里面用是不行的

在这里插入图片描述

解决方法:

通过将需要传递的值封装在一个方法中,父组件使用 provide() 提供这个方法而非直接传递值本身。子组件或孙组件通过 inject() 获取这个方法后,在需要时调用该方法来获取最新值。

父组件:

const provideData = () => {return {name: name.value,age: age.value,total: () => total.value,address: () => address.value}
}
provide('provideData',provideData);

子组件:

const provideData = inject('provideData');
const name= provideData().name;
const age = provideData().age;
const total = computed(() => provideData().total());
const address = computed(() => provideData().address());
http://www.lryc.cn/news/2380485.html

相关文章:

  • 小白的进阶之路系列之二----人工智能从初步到精通pytorch中分类神经网络问题详解
  • Semaphore解决高并发场景下的有限资源的并发访问问题
  • Vue3——Pinia
  • 02 基本介绍及Pod基础排错
  • Android Edge-to-Edge
  • ⼆叉搜索树详解
  • 如何使用通义灵码提高前端开发效率
  • 使用 ARCore 和 Kotlin 开发 Android 增强现实应用入门指南
  • Android Studio Kotlin 中的方法添加灰色参数提示
  • TCP协议简介
  • Linux学习心得问题整理(二)
  • SOC-ESP32S3部分:2-2-VSCode进行编译烧录
  • 数据可视化热图工具:Python实现CSV/XLS导入与EXE打包
  • Python虚拟环境再PyCharm中自由切换使用方法
  • 使用 Terraform 创建 Azure Databricks 工作区
  • 使用Mathematica绘制一类矩阵的特征值图像
  • GitHub 趋势日报 (2025年05月18日)
  • SpringBoot-6-在IDEA中配置SpringBoot的Web开发测试环境
  • JVM 工具实战指南(jmap / jstack / Arthas / MAT)
  • 基于springboot+vue的病例管理系统
  • SpringBoot(三)--- 数据库基础
  • 【漫话机器学习系列】268. K 折交叉验证(K-Fold Cross-Validation)
  • 【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核
  • 【Boost搜索引擎】构建Boost站内搜索引擎实践
  • 学习VS2022离线安装包的下载方法
  • 前端开发中的AI辅助测试:从手动到智能的转变
  • Nginx配置记录访问信息
  • HomeAssistant开源的智能家居docker快速部署实践笔记(CentOS7)
  • JAVA EE(进阶)_HTML
  • 自定义类、元组、字典和结构体对比——AutoCAD C# 开发中建立不同对象之间的联系