Day 17-其它 Composition API_ 依赖注入provide / inject

news2024/11/17 16:47:29

Provide / Inject

  • 当我们需要从父组件向子组件传递数据时,我们使用 props可以实现! 
  • 想象一下这样的结构:有一些深度嵌套的组件,而深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 props 沿着组件链逐级传递下去,可能会很麻烦。
  • provide 可以在祖先组件中指定我们想要提供给后代组件的数据或方法,而在任何后代组件中,我们都可以使用 inject 来接收 provide 提供的数据或方法。 
  • Provide / Inject 在vue 中主要是依靠原型链去实现的! (通过原型链逐级向上查找变量)
  • 使用场景:当父组件有很多数据需要分发给其子代组件的时候, 就可以使用provide和inject。

 

TIPS 你如果传递普通的值是不具有响应式的、需要通过ref reactive 添加响应式

eg: 点击单选按钮,共享颜色背景 

App.vue

<template>
  <h1>App.vue(爷爷组件)</h1>
  <label>
    <input v-model="colorVal" type="radio" value="red" name="color" />红色
  </label>
  <label>
    <input v-model="colorVal" type="radio" value="pink" name="color" />粉色
  </label>
  <label>
    <input v-model="colorVal" type="radio" value="yellow" name="color" />黄色
  </label>
  <!-- 盒子容器 -->
  <div class="box"></div>
  <hr />
  <provide-a />
</template>

<script setup>
import { ref, provide, readonly } from "vue";
import ProvideA from "./components/ProvideA.vue";
const colorVal = ref("red");
// 提供一个数据: 颜色值
provide("color",readonly(colorVal));
</script>

<style>
.box {
  height: 50px;
  width: 50px;
  border: 1px solid #ccc;
  /* 绑定 setup 中的变量 */
  background: v-bind(colorVal);
}
</style>

src/components/ProvideA.vue

<template>
  <h1>ProvideA.vue(父级组件)</h1>
  <div class="box"></div>
  <hr />
  <provide-b />
</template>

<script setup>
import { inject } from "vue";
import ProvideB from './ProvideB.vue'
// 通过 inject 注入读取共享数据
let color = inject("color");
</script>

<style scoped>
.box {
  width: 50px;
  height: 50px;
  border: 1px solid #ccc;
  /* 绑定 setup 中的变量 */
  background: v-bind(color);
}
</style>

src/components/ProvideB.vue

<template>
  <h1>ProvideB.vue(子孙组件)</h1>
  <div class="box"></div>
  <hr />
  <!-- 修改 provide 共享的数据 -->
  <div>
    <button @click="setColorHandle">修改 provide的值 green</button>
  </div>
</template>

<script setup>
import { inject, ref } from "vue";
// 通过 inject 注入读取共享数据
let color = inject("color");

// provide共享的数据、是可以修改的;(注意: 但不想让子组件修改数据, 可以在源数据中设置readonly! ) 
const setColorHandle = () =>{
    color.value = 'yellow'
}

</script>

<style scoped>
.box {
  width: 50px;
  height: 50px;
  border: 1px solid #ccc;
  /* 定义 setup中的变量 */
  background: v-bind(color);
}
</style>

 实现效果

 

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

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

相关文章

CORS 跨域资源共享

目录 1. 接口的跨域问题 2. 使用 cors 中间件解决跨域问题 3. 什么是 CORS 4. CORS 的注意事项 5. CORS 响应头部 - Access-Control-Allow-Origin 6. CORS 响应头部 - Access-Control-Allow-Headers 7. CORS 响应头部 - Access-Control-Allow-Methods 8. CORS请求的…

SpringMVC程序详解

1.什么是 Spring MVC&#xff1f; Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为“Spring MVC”。 从上述定义我们可以得…

消息服务 + Serverless 函数计算如何助力企业降本提效?

作者&#xff1a;柳下 背景介绍 消息队列服务&#xff08;下文均以 Message Service 命名&#xff09;作为云计算 PaaS 领域的基础设施之一&#xff0c;其高并发、削峰填谷的特性愈发受到开发者关注。Message Service 对上承接消息生产者服务的请求&#xff0c;对下连接消费者…

指令格式与寻址方式

指令与指令系统 指令: 控制计算机完成某种操作的命令。 指令系统&#xff1a; 处理器所能识别的所有指令的集合。 指令的兼容性&#xff1a; 同一系列机的指令都是兼容的。 汇编语言&#xff1a; 指令助记符。 指令格式 例如&#xff1a; 寻址方式 操作数可能的来源或…

SpringCloud(11)— 微服务保护(Sentinel)

SpringCloud&#xff08;11&#xff09;— 微服务保护(Sentinel) 一 认识Sentinel 1.雪崩问题及其解决方案 微服务调用链路中的某个服务出现问题&#xff0c;引起整个链路中所有的微服务都不可用&#xff0c;这就是我们常说的雪崩问题。 如何解决雪崩问题&#xff1f; 常见…

Qt之实现自定义控件的两种方式——插件法

文章目录前言一、需求二、实现1、新建项目2、自定义控件类3、编译插件4、拖拽使用&#xff08;1&#xff09;在designer.exe中直接拖拽&#xff08;2&#xff09;在Qt Creator的设计师中直接拖拽5、在项目中正常使用前言 可以通过Qt设计师拖拽原生控件进行界面开发&#xff0c;…

【Linux】操作系统及进程概念

大家好我是沐曦希&#x1f495; 文章目录一、冯诺依曼体系结构二、操作系统OS三、系统调用和库函数概念四、进程1.概念2.描述进程-PCB3.查看进程4.查看系统调用5.查看进程调用6. 通过系统调用创建进程-fork初识一、冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我…

外贸业务员该如何拓客?

最近几个月&#xff0c;做外贸的朋友都来吐槽&#xff0c;外贸干不下去了。一个B2B店铺和Google推广要花很多钱&#xff0c;竞争太激烈了。投入和产出极不成比例&#xff0c;就问我能不能解决。我也是行业出身。我问他们有没有听说过以下五种实惠高效的营销方式。然后我就想告诉…

JWT的组成以及工作原理

什么是 JWT? JWT &#xff08;JSON Web Token&#xff09; 是目前最流行的跨域认证解决方案&#xff0c;是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出&#xff0c;JWT 本身也是 Token&#xff0c;一种规范化之后的 JSON 结构的 Token。 JWT 自身包含了身份验证…

SpringBoot项目中基本常用依赖分享(个人向)

目录 &#xff08;1&#xff09;spring-boot-starter-web &#xff08;2&#xff09;mysql-connector-java &#xff08;3&#xff09;mybatis-spring-boot-starter &#xff08;4&#xff09;mapper-spring-boot-starter &#xff08;5&#xff09;mybatis-plus-boot-st…

数组string

数组 目录&#xff1a;数组一维数组一维数组的定义和初始化一维数组数据元素的访问练习1 找小猪练习2 算平均值比较两个数组是否相等一维数组冒泡法排序一维数组操作一维数组查找元素**普通查找**&#xff1a;二分查找&#xff1a;二分查找 最小下标最大下标查找元素个数一维数…

如何优化 MySQL

为什么要对 SQL 进行优化 有时候数据库会出现性能低、执行时间太长、等待时间太长、SQL 语句欠佳&#xff08;连接查询&#xff09;、索引失效等问题&#xff0c;这些问题会严重拖慢一个系统的速度&#xff0c;因此需要对 SQL 进行优化。 SQL 的编写过程和解析过程并非是一致…

Qt样式表语法

样式规则每个样式规则由选择器和声明组成。选择器&#xff1a;指定受该规则影响的部件。声明&#xff1a;指定这个部件上要设置的熟悉如&#xff1a;QPushButton{color:red} QPushButton是选择器&#xff1b;{color:red}是声明&#xff1b;color是属性&#xff1b;red是值。选择…

使用prometheus监控ES

下载elasticsearch_exporter wget 下载二进制包并解压、运行&#xff1a; wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.3.0/elasticsearch_exporter-1.3.0.linux-amd64.tar.gz tar -xvf elasticsearch_exporter-1.3.0.linux-a…

ARM6818开发板画任意矩形,圆形,三角形,五角星,6818开发板画太极,画五星红旗(含码源与思路)

本文利用6818开发板完成LCD屏上绘制任意的矩形&#xff0c;圆形&#xff0c;三角形或五角星形图案&#xff0c;还有绘制太极&#xff0c;五星红旗的方案。 目录 映射 绘制矩形 代码思路 代码实现 实践出真知 绘制圆形 代码思路 代码实现 绘制三角形 代码思路 代码实现…

【回答问题】ChatGPT上线了!用给写出可执行的实体链接模型

如何实现一个实体链接模型/代码 在实现实体链接模型之前&#xff0c;您需要确定所要链接的实体类型&#xff08;例如人名、地名、组织机构等&#xff09;。然后&#xff0c;您需要准备一份包含大量实体及其相应识别码的实体百科数据集。接着&#xff0c;您可以使用深度学习模型…

乾元通多卡聚合通信系统在应急通信领域的解决方案

后疫情时代&#xff0c;日益增多的大型集会类事件给现有通信系统带来极大的压力。目前&#xff0c;我国已经认识到应急通信系统的重要性&#xff0c;因此我国各个部门已经配置了不少应急通信系统和设备&#xff0c;并且积累了相当的使用经验。 在不同情况下&#xff0c;对应急…

基础数据结构——数组

目录 一、前言 二、一维数组 1、定义和初始化 2、一维变长数组 3、一维正向遍历 4、一维反向遍历 5、一维数组区间操作、一维数组从 a[1] 开始&#xff0c;读入一维数组 6、一维数组例题1 7、一维数组例题2 三、二维数组 1、二维数组初始化 2、三维数组初始化 3…

HTTP_day02

掘金地址 结合 小林 coding 当键入网址后&#xff0c;到网页显示&#xff0c;其间发生了什么 DNS 服务器 专门保存了 Web 服务器域名与 IP 的对应关系 域名用“.”分隔成多个单词&#xff0c;级别从左到右逐级升高&#xff0c;最右边的被称为“顶级域名” DNS 服务器是一个分…

聊聊Spring中最常用的11个扩展点

前言 我们一说到spring&#xff0c;可能第一个想到的是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。 没错&#xff0c;它们是spring的基石&#xff0c;得益于它们的优秀设计&#xff0c;使得spring能够从众多优秀框架中脱颖而出。 除…