前言

以下代码和内容的使用都是在setup中,未使用TS。

<script setup>
</script>

VUE3组件 (1) 关于defineProps()

VUE3组件 (2) 关于defineEmits()

VUE3组件 (3) 关于 slot 插槽


关于 Provide Inject

在组件(1)中,父子组件的传递使用的是props的方式。当只有父子两级的时候,确实很方便。但在实际开发中,组件的嵌套关系往往更加复杂,如果还是使用props,会使得组件的模版字面量非常的长,也会出现其他预期情况。

ProvideInject 就是用来解决上面的问题。

使用

这里使用三个组件来模拟数据传递的情况:
父级 parent:

<template><section class="item" @click="onClick">PARENT {{ num }}</section><childVue /> <!-- 引入子组件 -->
</template>
<script setup>import childVue from './child.vue';import { ref, provide } from 'vue';const num = ref(0);const onClick = () => {num.value++;}; provide('count', { num });
</script>

子组件 child :

<template><section class="item">CHILD</section><grandchildren /><!-- 引入孙组件 -->
</template>

孙组件 grandchildren :

<template><section class="item">GRANDCHILDREN</section><grandchildren />
</template>
<script setup>import { inject } from 'vue';const { num } = inject('count');</script>

这时页面会展示为

PARENT 0
CHILD
GRANDCHILDREN 0

语法解释

provide() 接受两个参数:

  • 第一个参数是要注入的 key,可以是一个字符串或者一个 symbol;
  • 第二个参数是要注入的值。

inject() 可以接受三个参数:

  • 第一个参数是注入的 key,
  • 第二个参数是可选的,即在没有匹配到 key 时使用的默认值。它也可以是一个工厂函数,用来返回某些创建起来比较复杂的值。
  • 第三个参数是可选的,类型为布尔值。当第二个参数的值就是一个函数,而不是工厂函数时,需要使用将值设置为 false。

配合响应性

当使用响应式 provide/inject 值时,建议尽可能将任何对响应式状态的变更都保持在 provider 内部。这样可以确保 provide 的状态和变更操作都在同一个组件内,使其更容易维护。
如果需要在 grandchildren 中修改num的值,如点击一次加2或者更多。应当:

<template><section class="item" @click="onClick">PARENT {{ num }}</section><childVue /> <!-- 引入子组件 -->
</template>
<script setup>import childVue from './child.vue';import { ref, provide } from 'vue';const num = ref(0);const onClick = () => {num.value++;}; // 新增函数const increaseNum = (params) => {num.value += params;};// 将 increaseNum  函数作为值 提供provide('count', { num, increaseNum });
</script>

孙组件 grandchildren :

<template><!-- 新增点击事件 --><section class="item"  @click="onClick">GRANDCHILDREN</section><grandchildren />
</template>
<script setup>import { inject } from 'vue';// 在注入出添加 increaseNum 变量const { num, increaseNum } = inject('count');// 新增的点击事件,触发 increaseNum 并且传参为 2 const onClick = () => {increaseNum(2);};
</script>

这样在点击 grandchildren 时,父组件的触发对应的函数,num每次加2。点击父组件时,每次加1。

参考

依赖注入
组合式 API:依赖注入

VUE3组件 (4) 关于 Provide Inject 依赖注入相关推荐

  1. vue3中的provide/inject(提供/注入)

    vue3中的provide/inject(提供注入) 在说provide/inject先说一下prop逐级穿透问题. 通常我们从父组件向子组件传递数据时,会用到props.对于只需要传递一层或二层时还 ...

  2. Vue组件通讯方式 provide/inject 介绍以及使用场景

    文章目录 vue的通讯方式 provide / inject的缺点 使用办法 代码案例展示一(provide字符串) 代码案例展示二(provide返回一个方法,并且方法返回字符串) vue的通讯方式 ...

  3. java依赖注入inject_@inject依赖注入的过程

    首先需要知道实例是如何创建以及如何被注入的,而这一切都由container这个容器进行管理. @H_403_6@1.实例构建 class ContainerImpl implements Contai ...

  4. inject 响应式_vue 的 provide 和 inject 依赖注入与 $parent

    依赖注入还是有负面影响的.它将你的应用以目前的组件组织方式耦合了起来,使重构变得更加困难.同时所提供的属性是非响应式的.这是出于设计的考虑,因为使用它们来创建一个中心化规模化的数据跟使用$root做这 ...

  5. 【React】1128- 如何在 React 组件中优雅的实现依赖注入

    控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度,其中最常见的方式就是依赖注入(Dependency Inject ...

  6. vue跨组件之间传值Provide/Inject

    官网传送门:inject  Vue2.2.0+ # 背景   关于Vue组件的通讯方式相信大家能倒背如流 父子组件:通过prop,$emit,[$root,$parent,$children] 非父子 ...

  7. Vue 组件化通信 provide inject ,dispatch ,boardcast

    入门 作为前端最容易上手的框架,Vue入门其实没啥说的,我放一段清单的代码,大家能看懂就说明能上手了 <template><div id="app">< ...

  8. Vue3+TS 中使用Provide/Inject 的例子

    详见:Provide / Inject | Vue.js (vuejs.org) 作用:在深度嵌套的组件中,将 prop 沿着组件链逐级传递会很麻烦.使用 Provide/Inject可以直接将父组件 ...

  9. 【Android 组件化】路由组件 ( 页面跳转参数依赖注入 )

    文章目录 一.参数自动注入 二.自定义注解 三.使用 @Extra 自定义注解 四.注解处理器解析 @Extra 自定义注解 并生成相应 Activity 对应代码 五.博客资源 组件化系列博客 : ...

最新文章

  1. android点击视频使用固定应用打开,Android 使用intent打开手机自带应用播放视频,音频,文档,还有打开应用市场...
  2. php显示玩家,php.取得玩家IP
  3. Result Maps collection already contains value for ***的问题
  4. C#打造自己的文件浏览器
  5. 【java8新特性】——方法引用(四)
  6. 5g网络架构_【5G网络架构】系列之五:5G核心网向to B演进
  7. HTML 转 PDF的两种实现方式
  8. 智能语音概念界定及技术架构
  9. 计算机电子表格计算怎么做,excel表格如何做总计|excel表格总计教程
  10. 谈谈创业这点事 专业的盲区
  11. Win11找不到显卡控制面板怎么办?
  12. 计算机应用基础 教材 黄洪艺,高教社产品信息检索系统
  13. 《零基础学JavaScript(全彩版)》学习笔记
  14. GSMA启用包容性技术实验室
  15. 生命与自然的相互感应
  16. [Latex] 自动换行 | 正文两端对齐
  17. Mybatis的一对多映射
  18. 提交代码时提示Could not read from remote repository.
  19. Mac 教程:OS X「剪切」移动文件的三种方法
  20. Windows核心编程 - API HOOK应用

热门文章

  1. 分享10个站内优化技巧 - 孔宇SEO
  2. 7个最佳餐厅应用模板
  3. seata TCC模式
  4. 自学c语言第4天(补)
  5. HIVE表的迁移(外部表到内部表并压缩数据)
  6. 金蝶kis商贸采购单商品代码_金蝶KIS商贸高级版操作常见问题
  7. Linux 防火墙设置指定 IP 访问
  8. 【C++札记】类的继承
  9. 涂鸦win7电脑主题
  10. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——2.8 将单声伴奏制作成立体声伴奏...