广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >怎么用 Provide 和 Inject 做Vue3插件
  • 574
分享到

怎么用 Provide 和 Inject 做Vue3插件

2024-04-02 19:04:59 574人浏览 独家记忆
摘要

这篇文章主要介绍“怎么用 Provide 和 Inject 做vue3插件”,在日常操作中,相信很多人在怎么用 Provide 和 Inject 做Vue3插件问题上存在疑惑,小编查阅了各式资料,整理出简单

这篇文章主要介绍“怎么用 Provide 和 Inject 做vue3插件”,在日常操作中,相信很多人在怎么用 Provide 和 Inject 做Vue3插件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用 Provide 和 Inject 做Vue3插件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

使用 Provide 和 Inject 的 Vue依赖项注入对于构建Vue3插件或避免 prop 钻取非常有用。

尽管不常用,但是你可以仅使用两种内置方法来实现依赖项注入:provide和inject。

通过查看 Composition api 文档会发现,在 Vue 3.0 中,使用 Provide 和 Inject 进行依赖项注入更为常见。这主要是因为  Composition API 对 this 引用的更改,插件必须切换为这种模式才行。

在本文中,我们将研究在 Vue3 中使用 Provide 和 Inject,以及如何将其用于构建 Vuejs 插件。

为什么 Vue3 插件的工作方式与以往不同

在 Vue2 中,大多数插件将属性注入到 this 上。例如可以通过 this.$router 访问 Vue  路由器。

但是,setup() 方法不再包含对 this 的相同引用。进行这种更改的主要原因是增加了对 typescript 的支持。

那么在 Vue3 中该如何访问我们的插件呢?可以用 provide 和 inject 来帮助我们在 Vue 程序中注入依赖项。Provide/inject  用于依赖项注入,可以使我们能在 Vue 程序的根目录中提供插件,并且然后将其注入子组件中。

在 Composition API 中,只能在 setup() 方法期间调用这两种方法。

什么是 provide 和 inject

我们需要某种键来识别依赖关系, javascript 的 Symbol 可以复合这种要求。

然后 provide 方法会将我们的 Symbol 与某个值相关联,而 inject 方法会用相同的 Symbol 检索这个值。

下面是一个例子:

import { provide, inject } from 'vue'  const LoggedInSymbol = Symbol()  const ParentComponent = {   setup() {     provide(LoggedInSymbol, true)   } }  const DeepDescendent = {   setup() {     // 第二个可选参数是默认值(如果不存在)     const isLoggedIn = inject(LoggedInSymbol, false)     return {       isLoggedIn     }   } }

Vue3 通过这种模式可以实现一些很实用的技巧。

可以在程序中全局提供依赖项

如果我们想在全局作用域中提供一些东西,可以在声明我们的 VUE 实例的时候下用 app.provide。然后可以用相同的方式进行注入。

main.jsimport { createApp } from 'vue' import App from './App.vue'   const app = createApp(App)  const ThemeSymbol = Symbol() app.provide(ThemeSymbol, 'dark')   app.mount('#app')

可以用 ref 提供响应式数据

如果我们希望将响应式数据传递给子组件,这也非常方便。只需要用 ref() 传递我们方法的一个响应式的属性。

// 生产者r (父组件) const LoggedInSymbol = Symbol() const loggedIn = ref('true') provide(LoggedInSymbol, loggedIn)  // 消费者 (子组件) const theme = inject(LoggedInSymbol, ref('false'))

怎样在插件中使用 provide 和 inject

实际上设计插件与我们刚才看到的简单例子非常相似。

但是我们不想使用单个值,而是要使用组合函数。这是 Vue3 的一个巨大优势 —— 能够根据函数组织和提取代码。

由于我们的代码无论如何都应该用有组织的组合函数编写,所以只需要创建这些 provide 和 inject 方法就能够写出一个插件。

先简单的看一下 Vue3 Composition API 文档中提供的插件例子。

Plugin.jsconst StoreSymbol = Symbol()  export function provideStore(store) {   provide(StoreSymbol, store) }  export function useStore() {   const store = inject(StoreSymbol)   if (!store) {     // throw error, no store provided   }   return store }

在实际的组件中会这样使用:

// 在组件根目录提供 store // const App = {   setup() {     provideStore(store)   } }  const Child = {   setup() {     const store = useStore()     // use the store   } }

根据上述代码,在某些根组件中,我们提供了插件,并向其传递了组件函数。然后无论想在哪里使用都必须将其注入到我们的组件中。

组件永远不必真正进行 provide/inject 调用,而只需调用插件公开的 provideStore/useStore 方法即可。

还能用旧的插件吗

简单的来说是:能。如果多说点,那就是取决于你自己的想法。

可以继续使用 Options API,并且对 this 的引用方式与以前相同,并且所有旧插件的工作方式都不变。

但是迁移到 Vue3 并利用其所有功能觉得是值得的。

只要你想用 Vue2 的 Options API,你的插件就可以正常工作。但是,很多维护良好的插件或库都应该添加对 Vue3 的支持。

总结

正确使用 provide/inject 绝对能够提高你对 Vue 的驾驭能力。

尽管很多应用并不会使用这些概念,但是如果你认真开发插件,则 Vue3 的 Composition API 意味着你必须使用provide 和  inject。

到此,关于“怎么用 Provide 和 Inject 做Vue3插件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用 Provide 和 Inject 做Vue3插件

本文链接: https://www.lsjlt.com/news/66194.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用 Provide 和 Inject 做Vue3插件
    这篇文章主要介绍“怎么用 Provide 和 Inject 做Vue3插件”,在日常操作中,相信很多人在怎么用 Provide 和 Inject 做Vue3插件问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2022-10-19
  • Vue3插件中怎么使用Provide和Inject
    今天小编给大家分享一下Vue3插件中怎么使用Provide和Inject的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么...
    99+
    2023-07-04
  • vue3中provide和inject怎么用
    这篇文章将为大家详细讲解有关vue3中provide和inject怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。provide 和 inject 的讲解provide和inject可以实现嵌套组件之...
    99+
    2023-06-20
  • vue3中provide和inject怎么使用
    本篇内容主要讲解“vue3中provide和inject怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3中provide和inject怎么使用”吧!前言:在父子组件传递数据时,通常...
    99+
    2023-06-21
  • Vue3的provide/inject怎么使用
    本文小编为大家详细介绍“Vue3的provide/inject怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3的provide/inject怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2022-10-19
  • Vue3中的provide、inject怎么使用
    一. 场景再现先别着急考虑标题这个 api 的含义。在这里我先动手写一个比较常见的场景。所对应的组件内部代码比较简单,这里我就不展示了,逻辑上就是 这三个组件层层引用。所对应的页面效果如下:如上图,这是一个在项目中很常见的一个场景,三层嵌套...
    99+
    2023-05-14
    Vue3 provide inject
  • Vue3全局组件通信之provide/inject怎么使用
    本篇内容介绍了“Vue3全局组件通信之provide/inject怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、前言顾名思义,爷...
    99+
    2023-07-06
  • Vue中的provide和inject怎么使用
    今天小编给大家分享一下Vue中的provide和inject怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在vue2...
    99+
    2023-07-06
  • vue3中怎么使用vue-codemirror插件
    本文小编为大家详细介绍“vue3中怎么使用vue-codemirror插件”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue3中怎么使用vue-codemirror插件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-06
  • 怎么使用Vue3开发Fimga插件
    本篇内容介绍了“怎么使用Vue3开发Fimga插件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用 Vue 3 开发 Figma 插件Fig...
    99+
    2023-06-29
  • vue3 api自动导入插件怎么使用
    这篇文章主要介绍了vue3 api自动导入插件怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3 api自动导入插件怎么使用文章都会有所收获,下面我们一起来看看吧。1. vue3...
    99+
    2023-07-05
  • vue3中怎么使用particles插件实现粒子背景
    这篇文章主要介绍了vue3中怎么使用particles插件实现粒子背景的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3中怎么使用particles插件实现粒子背景文章都会有所收获,下面我们一起来看看吧。效...
    99+
    2023-06-29
  • CSS和JS合并的WordPress插件怎么用
    小编给大家分享一下CSS和JS合并的WordPress插件怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!css的选择器有哪些css的选择器可以分为三大类,即id选择器、class选择器、标签选择器。它们之间可以有多种...
    99+
    2023-06-14
  • 怎么使用docker安装elasticsearch和head插件
    本文小编为大家详细介绍“怎么使用docker安装elasticsearch和head插件”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用docker安装elasticsearch和head插件”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
  • Vue3的事件处理和修饰符怎么定义使用
    本篇内容介绍了“Vue3的事件处理和修饰符怎么定义使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vue事件处理是每个Vue项目的必要方面...
    99+
    2023-07-04
  • 怎么使用Vue3 SFC和TSX方式调用子组件中的函数
    今天小编给大家分享一下怎么使用Vue3 SFC和TSX方式调用子组件中的函数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-04
  • dropload.js插件下拉刷新和上拉加载怎么用
    小编给大家分享一下dropload.js插件下拉刷新和上拉加载怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下第...
    99+
    2022-10-19
  • 怎么调试Cordova应用的JavaScript代码和自定义插件代码
    这篇文章主要讲解了“怎么调试Cordova应用的JavaScript代码和自定义插件代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么调试Cordova应用的JavaScript代码和自...
    99+
    2023-06-05
  • Ubuntu 14.04 用户怎么安装深度音乐播放器和百度音乐插件
    这篇文章主要介绍“Ubuntu 14.04 用户怎么安装深度音乐播放器和百度音乐插件”,在日常操作中,相信很多人在Ubuntu 14.04 用户怎么安装深度音乐播放器和百度音乐插件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-13
  • win10上怎么使用mingw64编译器配置Rust开发环境和idea配置Rust插件
    这篇文章主要介绍“win10上怎么使用mingw64编译器配置Rust开发环境和idea配置Rust插件”,在日常操作中,相信很多人在win10上怎么使用mingw64编译器配置Rust开发环境和idea配置Rust插件问题上存在疑惑,小编...
    99+
    2023-07-05
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作