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

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());

相关文章:

  • Vue之入门(Vue是什么以及Vue工作原理)
  • 数据要素如何重构人力资本升级
  • 消息传递--树形dp--50?!
  • windows/linux 模拟鼠标键盘输入
  • 创建型:建造者模式
  • 文件操作和IO—初识文件
  • leetcode hot100:三、解题思路大全:哈希(两数之和、字母异位词分组、最长连续序列)、双指针(移动零、盛最多水的容器、三数之和、接雨水)
  • 《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》
  • COMSOL软件入门
  • 爱普生Epson PX-S887打印机信息
  • 不同企业数字化转型补贴差异解析:政策导向下的分层激励模式
  • 从零开始的嵌入式学习day24
  • vmware虚拟机中安装win11系统
  • 开疆智能Profinet转RS485网关连接温度送变器配置案例
  • Ai学习之LangChain框架
  • 證券行業證券交易系統開發方案
  • 基于flask+vue的电影可视化与智能推荐系统
  • 小白入门FPGA设计,如何快速学习?
  • 05_核支持向量机
  • 知识体系_数据分析挖掘_基尼系数
  • 凤阳文旅局长回应鼓楼瓦片脱落:楼宇是否属于文物?施工经费用在何处?
  • 国家发改委:城市更新项目必须建立多元化多层级资金投入机制
  • 黄仁勋的新逻辑:从“卖铲人”到“全球AI基建运营商”
  • 王楚钦球拍检测环节受损,国际乒联发声明
  • 今晚油价下调,加满一箱油将省9元
  • 受贿2.61亿余元,陕西省政协原主席韩勇一审被判死缓