Vue3中依赖注入provide、inject的使用

 更新时间:2023年10月19日 09:38:07   作者:痴心阿文  
这篇文章主要介绍了Vue3中依赖注入provide、inject的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、Prop 逐级透传问题

vue中我们要从父组件向子组件传递数据时,会使用 props。

如果需要给深层子组件传递数据,会非常麻烦,

如下图:

provide 和 inject 可以帮助我们解决这一问题。

一个父组件相对于其所有的后代组件,会作为依赖提供者。

任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。

二、Provide (提供)

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

如果不使用 <script setup>,请确保 provide() 是在 setup() 同步调用的:

provide() 函数接收两个参数。第一个参数被称为注入名,可以是一个字符串或是一个 Symbol。

后代组件会用注入名来查找期望注入的值。

一个组件可以多次调用 provide(),使用不同的注入名,注入不同的依赖值。

第二个参数是提供的值,值可以是任意类型,包括响应式的状态,比如一个 ref:

提供的响应式状态使后代组件可以由此和提供者建立响应式的联系。

三、应用层 Provide

除了在一个组件中提供依赖,我们还可以在整个应用层面提供依赖:

在应用级别提供的数据在该应用内的所有组件中都可以注入。

这在你编写插件时会特别有用,因为插件一般都不会使用组件形式来提供值。

四、Inject (注入)

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

如果提供的值是一个 ref,注入进来的会是该 ref 对象,而不会自动解包为其内部的值。

这使得注入方组件能够通过 ref 对象保持了和供给方的响应性链接。

同样的,如果没有使用 <script setup>,inject() 需要在 setup() 内同步调用:

五、注入默认值

默认情况下,inject 假设传入的注入名会被某个祖先链上的组件提供。

如果该注入名的确没有任何组件提供,则会抛出一个运行时警告。

如果在注入一个值时不要求必须有提供者,那么我们应该声明一个默认值,和 props 类似:

在一些场景中,默认值可能需要通过调用一个函数或初始化一个类来取得。

为了避免在用不到默认值的情况下进行不必要的计算或产生副作用,我们可以使用工厂函数来创建默认值:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vuex实现像调用模板方法一样调用Mutations方法

    vuex实现像调用模板方法一样调用Mutations方法

    今天小编就为大家分享一篇vuex实现像调用模板方法一样调用Mutations方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • VueX浏览器刷新如何实现保存数据

    VueX浏览器刷新如何实现保存数据

    这篇文章主要介绍了VueX浏览器刷新如何实现保存数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解Vue如何支持JSX语法

    详解Vue如何支持JSX语法

    这篇文章主要介绍了详解Vue如何支持JSX语法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • vue3页面组件中怎么获取上一个页面的路由地址

    vue3页面组件中怎么获取上一个页面的路由地址

    这篇文章主要给大家介绍了关于vue3页面组件中怎么获取上一个页面的路由地址的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • 使用Vue实现简单日历效果

    使用Vue实现简单日历效果

    这篇文章主要为大家详细介绍了使用Vue实现简单日历效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 基于vue+electron实现文件下载打开wps预览

    基于vue+electron实现文件下载打开wps预览

    这篇文章主要给大家介绍了基于vue+electron实现文件下载打开wps预览,文中有详细的代码示例供大家借鉴参考,感兴趣的同学可以参考阅读下
    2023-08-08
  • vue3+vite项目H5配置适配步骤详解

    vue3+vite项目H5配置适配步骤详解

    这篇文章主要为大家介绍了vue3+vite项目H5配置适配步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • vue之封装多个组件调用同一接口的案例

    vue之封装多个组件调用同一接口的案例

    这篇文章主要介绍了vue之封装多个组件调用同一接口的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue封装组件的过程详解

    vue封装组件的过程详解

    这篇文章主要为大家详细介绍了vue中封装组件的相关知识,文中的示例代码讲解详细,对我们深入了解vue有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • 详解Vue爬坑之vuex初识

    详解Vue爬坑之vuex初识

    本篇文章主要介绍了详解Vue爬坑之vuex初识 ,Vue 的状态管理工具 Vuex可以解决大型项目中子组件之间传递数据,有兴趣的可以了解下
    2017-06-06

最新评论