当前位置: 首页 > 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());
http://www.xdnf.cn/news/545041.html

相关文章:

  • 分析 redis 的 exists 命令有一个参数和多个参数的区别
  • 区间内最远互质点对
  • 编程最接近现实的模拟---随机数
  • QT6 源(113)篇二:阅读与注释工具栏 QToolBar,给出源码
  • 彭博社聚焦Coinbase数据泄露,CertiK联创顾荣辉警示私钥风险与物理攻击
  • 安全工具配置
  • 21. 自动化测试框架开发之Excel配置文件的测试用例改造
  • [特殊字符] React Fiber架构与Vue设计哲学撕逼实录
  • 【Linux笔记】——简单实习一个日志项目
  • 以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会
  • C及C++的音频库与视频库介绍
  • MATLAB实现GAN用于图像分类
  • Spring Boot 集成 Elasticsearch【实战】
  • JAVA EE(进阶)_HTML
  • PHP、JAVA、Shiro反序列化
  • Index-AniSora技术升级开源:动漫视频生成强化学习
  • MySQL 8.0 OCP 英文题库解析(六)
  • 系统架构设计(十七):微服务数据一致性和高可用策略
  • anaconda、miniconda、conda的关系及miniconda安装
  • 虚拟环境中VSCode运行jupyter文件
  • 2025年AI搜索引擎发展洞察:技术革新与市场变革
  • 数据库----软考中级软件设计师(自用学习笔记)
  • ShenNiusModularity项目源码学习(27:ShenNius.Admin.Mvc项目分析-12)
  • [创业之路-369]:企业战略管理案例分析-8-战略制定-战略制定起点:差距分析
  • Jenkins服务器配置密钥对
  • 三、【数据建模篇】:用 Django Models 构建测试平台核心数据
  • windows维护工具vip版
  • Django基础(二)Django 项目基础操作
  • NLP学习路线图(二): 概率论与统计学(贝叶斯定理、概率分布等)
  • GO语言学习(六)