Vue3依赖注入

适用场景

尤其针对一个变量需要从顶层组件开始透传,途径很多个子组件最后在第n代子组件使用的时候。对于这些途经的子组件而言,它们不但不使用而且完全不关心该变量具体是什么,只是作为一个传递工具罢了。这种情况下,使用依赖注入最方便。举例:

  • 父组件A:透传一个变量 x1
  • A的子组件A1 的子组件A11 也就是A的第二代组件中才会使用。这时候如果使用props进行传值,这些中间组件都仅仅作为一个数据传递的工具罢了,会出现很多的数据冗余。

依赖注入

依赖注入通过两个内置方法:

  • 父组件provide提供一个变量或方法
  • 子组件inject注入一个从祖先组件或整个应用提供的值

使用举例:

  • 父组件
// 父组件
<script setup>
import { ref, provide } from 'vue'
import { fooSymbol } from './injectionSymbols'// 提供静态值
provide('foo', 'bar')
// 提供响应式的值
const count = ref(0)
provide('count', count)// 提供时将 Symbol 作为 key
provide(fooSymbol, count)
</script>
  • 子组件
<script setup>
import { inject } from 'vue'
import { fooSymbol } from './injectionSymbols'// 注入不含默认值的静态值
const foo = inject('foo')// 注入响应式的值
const count = inject('count')// 通过 Symbol 类型的 key 注入
const foo2 = inject(fooSymbol)</script>

props和依赖注入

  • props透传

props透传是下面这种模式的,当有一个由多层级嵌套的组件形成的一个巨大的组件树时,某个深层的子组件需要一个较远的祖先组件中的部分数据。这种情况下如果仅使用 props ,则必须将其沿着组件链逐级传递下去,这会非常麻烦:
在这里插入图片描述

  • 依赖注入

依赖注入是如下这种模式的。provideinject 可以很好的帮助我们解决这一问题。 一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。

在这里插入图片描述

  • 依赖注入的提供层通过provide提供数据
  • 使用层通过inject注入数据

使用symbol

我们已经了解了如何使用字符串作为注入名。但 如果你正在构建大型的应用,包含非常多的依赖提供,或者你正在编写提供给其他开发者使用的组件库,建议最好使用 Symbol 来作为注入名以避免潜在的冲突(PS:建议学习Symbol特性)

symbol的使用:

  • 新建一个用于存储symbol的文件
// keys.js
export const myInjectionKey = Symbol()
  • 在提供方组件中
// 在供给方组件中
import { provide } from 'vue'
import { myInjectionKey } from './keys.js'provide(myInjectionKey, { /*要提供的数据
*/ });
  • 在使用方组件中
// 注入方组件
import { inject } from 'vue'
import { myInjectionKey } from './keys.js'const injected = inject(myInjectionKey)

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

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

相关文章

Windows下搭建Tomcat HTTP服务,发布公网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…

postgres在docker中使用

记录个人开发过程中postgres在docker中的使用&#xff0c;以便后续查看。 Dockerfile 个人是在M1电脑上开发&#xff0c;所以platform使用linux/amd64来兼容amd芯片。 FROM --platformlinux/amd64 postgres:16.1-alpine COPY ./poetrydb.sql /docker-entrypoint-initdb.d/po…

NSSCTF第13页(3)

[FSCTF 2023]巴巴托斯&#xff01; 看见个输入路径&#xff0c;打了半天没进去&#xff0c;php伪协议也打不进去&#xff0c; 用dirsearch扫一下 看了半天才看出来&#xff0c;那串英文 Access Denied! I love FSCTF Browser 是要用FSCTF浏览器&#xff0c;改一下ua头就行了…

创纪云助力客服系统:通过API和无代码开发实现与电商平台的智能集成

无缝连接电商和客服系统&#xff1a;管家婆的无代码开发解决方案 在电子商务和客户服务日新月异的发展中&#xff0c;企业面临着如何提高效率和客户满意度的挑战。江苏创纪云网络科技有限公司&#xff08;INNOVATION ERA&#xff09;推出了一款无需API开发的解决方案&#xff…

Springboot的excel导出

这里导出excel用到的是 阿里巴巴的easyexcel 1、首先导入依赖 <!--alibaba easyexcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</version> </dependency> 2、…

灰度发布专题---4、APP灰度发布

APP如何灰度发布 我们前面讲解了配置文件灰度发布、IP切流、静态页灰度发布&#xff0c;但如果是APP该如何灰度发布呢&#xff1f;APP的灰度发布比较简单&#xff0c;也比较传统&#xff0c;不像我们其他程序能完全自动化操作。 APP灰度发布流程 上面这张图是灰度发布流程图&…

Python爬虫遇到重定向URL问题时如何解决?

什么是重定向 重定向是指当用户请求一个URL时&#xff0c;服务器返回一个中断请求的URL的响应。这种情况通常发生在网站对URL进行了修改或者重定向到其他页面的情况下。其中&#xff0c;如果处理不当开发&#xff0c;可能会导致爬虫无法获取所需的数据&#xff0c;从而影响爬虫…

Python编程基础:数据类型和运算符解析

想要学习Python编程语言&#xff1f;本文将为您介绍Python中常见的数据类型和运算符&#xff0c;为您打下坚实的编程基础。了解不同的数据类型和运算符&#xff0c;掌握它们之间的配合方式&#xff0c;让您能够更轻松地进行数据处理和计算任务。无论您是初学者还是有一定经验的…

Sui主网升级至V1.14.2版本

Sui主网现已升级至V1.14.2版本&#xff0c;同时Sui协议升级至31版本。其他升级要点如下所示&#xff1a; #14875: [修复] 为所有权限设置共识度量值。 #14811: [Narwhal] 改进每个权限的共识信息度量的可用性。 完整变更日志&#xff1a;Release mainnet-v1.14.2 MystenL…

linux命令解析神器

遥想刚迈入职场时&#xff08;当时的工作环境&#xff0c;需要频繁使用linux&#xff0c;登录设备后台操作&#xff09;&#xff0c;偶然间听到我的领导和其他同事说 &#xff1a;“XXX&#xff0c;多学一学。大佬们太厉害了&#xff0c;太低级的问题不要直接问&#xff0c;你登…

图像异常检测研究现状综述

论文标题&#xff1a;图像异常检测研究现状综述 作者&#xff1a;吕承侃 1, 2 沈 飞 1, 2, 3 张正涛 1, 2, 3 张 峰 1, 2, 3 发表日期&#xff1a;2022年6月 阅读日期 &#xff1a;2023年11月28 研究背景&#xff1a; 图像异常检测是计算机视觉领域的一个热门研究课题, 其目…

面试篇之微服务(二)

目录 服务容灾 21.什么是服务雪崩&#xff1f; 22.什么是服务熔断&#xff1f;什么是服务降级&#xff1f; 什么是服务熔断&#xff1f; 什么是服务降级&#xff1f; 有哪些熔断降级方案实现&#xff1f; 23.Hystrix怎么实现服务容错&#xff1f; 24.Sentinel怎么实现限…