vue3依赖注入(provide 和 inject)

依赖注入(provide 和 inject),解决Prop 逐级透传问题。跨多组件转递参数,避免使用Prop 逐级透传。

1. 父组件要为组件后代提供数据,需要使用到 provide() 函数:

<script setup>
import { provide,ref,app  } from 'vue'
//使用 Symbol 来作为注入名以避免潜在的冲突
//const myInjectionKey = Symbol()可以单独放在一个文件,大型项目中好管理
const myInjectionKey = Symbol()
provide(/* 注入名1 */ myInjectionKey , /* 值 */ 'hello!')//可以多个使用
const myInjectionKey2 = Symbol()
provide(/* 注入名2 */ myInjectionKey2 , /* 值 */ 'hello!')//第二个参数是提供的值,值可以是任意类型,包括响应式的状态,比如一个 ref:
//使用方可以和提供方保持响应性
const count = ref(0)
provide('key', count)//还可以全局提供依赖
const app = createApp({})
app.provide(/* 注入名 */ 'message', /* 值 */ 'hello!')
</script>

2. 后代组件要注入上层组件提供的数据,需使用 inject() 函数:

<script setup>
import { inject } from 'vue'
//默认值
const value = inject('message', '这是默认值')//可以使用工厂函数来创建默认值
const value = inject('key', () => new ExpensiveClass(), true)
</script>

3. 和响应式数据配合使用

<!-- 在提供方组件内用法 -->
<script setup>
import { provide, ref } from 'vue'const location = ref('North Pole')
function updateLocation() {location.value = 'South Pole'
}provide('location', {location,updateLocation
})
</script><!-- 在注入方(使用方)组件内用法 -->
<script setup>
import { inject } from 'vue'
const { location, updateLocation } = inject('location')
</script><template><button @click="updateLocation">{{ location }}</button>
</template>

4. 提供的数据不想被使用方更改,使用 readonly() 来包装提供的值。

<script setup>
import { ref, provide, readonly } from 'vue'const count = ref(0)
provide('read-only-count', readonly(count))
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端框架vue的样式操作,以及vue提供的属性功能应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【Linux】环境基础开发工具使用

目录 Linux软件管理器 yum 1.什么是软件包 2.查看软件包 3安装与卸载 vim-Linux编辑器 1.vim基础概念 2.vim的基础操作 命令模式基本操作 底层模式基本操作 3、其它模式 Linux编译器 gcc/g 1.如何进行编译 2.编译的四个过程 预处理(-E) 编译(-S) 汇编(-c) 链接…

python二级备考(2)-简单应用题

第1套 使用turtle库的turtle. right()函数和turtle.fd()函数绘制一个菱形&#xff0c;边长为200像素&#xff0c;4个内角度数为2个60度和2个120度 键盘输入一组人员的姓名、性别、年龄等信息&#xff0c;信息间采用空格分隔&#xff0c;每人一行&#xff0c;空行回车结束录入&a…

EMQX 实践

MQTT 核心概念 发布订阅 MQTT 基于发布订阅模式&#xff0c;它解耦了消息的发送方&#xff08;发布者&#xff09;和接收方&#xff08;订阅者&#xff09;&#xff0c;引入了一个中间代理的角色来完成消息的路由和分发。发布者和订阅者不需要知道彼此的存在&#xff0c;他们…

向量数据库:在数据世界划分新领域

向量数据库&#xff1a;在数据世界划分新领域 向量数据库正成为数据管理领域的一个独特类别&#xff0c;这一趋势反映了过去十年SQL与NoSQL之争的历史演变。随着现代企业面对越来越复杂的数据环境&#xff0c;向量数据库以其专门的功能&#xff0c;处理高维度数据和语义搜索能…

代码随想录算法训练营第day47|121. 买卖股票的最佳时机 、 122.买卖股票的最佳时机II

目录 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 力扣题目链接(opens new window) 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未…

mybatis实践篇(一)

日志&#xff08;logImpl&#xff09; StdOutImpl <setting name"logImpl" value"org.apache.ibatis.logging.stdout.StdOutImpl"/>Slf4jImpl <setting name"logImpl" value"org.apache.ibatis.logging.slf4j.Slf4jImpl"/&…

cannot find -xml2: No such file or directory的解决方法

一&#xff0c;问题现象 在编译库的时候出现如下图所示的报错&#xff1a;C:/msys64/mingw32/bin/…/lib/gcc/i686-w64-mingw32/13.2.0/…/…/…/…/i686-w64-mingw32/bin/ld.exe: ca nnot find -lxml2: No such file or directory collect2.exe: error: ld returned 1 exit s…

146 Linux 网络编程2 ,Socket编程,如何创建Linux 服务器 和linux 客户端

IPport 就是一个程序在网络上的身份证号码。 这意味着我们需要如果写一个服务器&#xff0c;至少需要将这台服务器的ip 和 端口号写到程序里面。 实际上更细化的说&#xff1a;应该是将这三都写进程序里面 &#xff1a; IP类型&#xff08;IPV4或者IPV6&#xff09;&#xff…

量化交易入门(二)量化交易有关的数学和统计学知识

量化交易有关的数学和统计学知识包括&#xff1a;高等数学&#xff08;微积分、线性代数等&#xff09;、概率论与数理统计是量化分析的基础&#xff0c;时间序列分析是预测市场动向和金融数据分析的关键工具。 &#xff08;一&#xff09;、在量化分析和量化交易领域&#xf…

linux——进程(1)

目录 一、概念 1.1、认识进程 1.2、进程描述符&#xff08;PCB&#xff09; 1.3、进程的结构体&#xff08;task_struct&#xff09; 二、查看进程 三、获取进程的Pid和PPid 3.1、通过系统调用获取进程的PID和PPID 四、创建进程 4.1、fork() 4.2、用if进行分流 五、…

【PyQt错误集 - 1】:PyQt调用多线程导致窗口异常退出的问题分析(进程已结束,退出代码 -1073741819 (0xC0000005))

文章目录 问题分析解决方法 问题分析 运行以下程序&#xff1a; def run_thread_WTD(self):threading.Thread(targetself.WTD).start()def WTD(self):word_path self.word_path.text()# textBrowser为多行文本框QTextEditself.pycorrectorKenlm(word_path, textBrowser)# ke…

NCV1117ST50T3G线性稳压器芯片中文资料规格书PDF数据手册引脚图图片价格参数

产品概述&#xff1a; NCP1117系列为低压差&#xff08;LDO&#xff09;正向线性电压稳压器&#xff0c;能够提供超过1.0A的输出电流&#xff0c;800mA时温度范围内最大压差为1.2V。这一系列包括八个固定输出电压&#xff1a;1.5V、1.8V、2.0V、2.5V、2.85V、3.3V、5.0V 和 12…

2024/3/15 记录简版抖音部署遇到的问题

1、Centos连不上网 参考这一篇&#xff1a;虚拟机 CentOS 有线连接图标直接消失&#xff0c;网络连接不上&#xff0c;网络连接失败的解决方案&#xff08;亲测有效&#xff09;_centos网络图标不见了-CSDN博客 2、SQLyog连接不到docker中的mysql 原因是对密码有加密过程 &a…

STM32F407_多点电容触摸(GT911)驱动

目录标题 前言1、简单介绍2、触摸芯片与主机的硬件连接3、内部寄存器3.1、控制寄存器&#xff08;0X8040&#xff09;3.2、配置寄存器组&#xff08;0X8047~0X8100&#xff09;3.3、状态寄存器(0x814E)3.4、坐标寄存器(0x8150-0x8177) 4、初始化流程4.1、IIC地址选择4.2、更新G…

FTP服务器的工作原理

1.1、概述 FTP服务器是网络中提供文件存储和访问服务的服务器&#xff0c;无论是个人还是企业&#xff0c;都可以搭建FTP服务器&#xff0c;用来上传数据、下载数据和共享文件。FTP采用C/S&#xff08;客户端/服务器&#xff09;架构&#xff0c;用户只要通过FTP客户端程序连接…

html--简历

文章目录 html html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0&qu…

字母异位词分组【每日一题】

可以通过案例找到规律&#xff0c;每个词排序完后是同一个&#xff0c;所以通过hasmap存储排序过的值做key&#xff0c;值是存储单词集合。 package HasTable;import java.util.*;class Solution {static List<List<String>> groupAnagrams(String[] strs) {Map&l…

jupyter notebook 突然莫名奇妙的白屏

jupyter notebook 突然莫名奇妙的白屏 事件背景&#xff1a; 最近在折腾openai&#xff0c;哎&#xff0c;一言难尽&#xff0c;使用的是conda管理python版本的切换&#xff0c;使用jupyter notebook来运行python程序&#xff0c;其实PyCharm也行&#xff0c;但是&#xff0c;…