Vue3.0插件执行原理与实战

2022-10-14

这篇文章主要介绍了Vue3.0插件执行原理与实战,Vue项目能够使用很多插件来丰富自己的功能Vue-Router、Vuex等,节省了我们大量的人力和物力,下面我们就一起来了解Vue3.0插件的原理吧,需要的小伙伴可以参考一下

目录
  • 一、编写插件
    • 1.1 包含install()方法的Object
    • 1.2 通过function的方式
  • 二、使用插件
    • 三、app.use()是如何执行插件的

      一、编写插件

      Vue项目能够使用很多插件来丰富自己的功能,例如Vue-Router、Vuex……,这么多插件供我们使用,节省了我们大量的人力和物力,那这些插件是开发出来的呢?是不是我们自己也想拥有一个属于自己的vue插件,下面就展示一下如何写一个自己的Vue插件。

      1.1 包含install()方法的Object

      Vue插件可以是一个包含install方法的Object对象,此时插件被调用时会调用install方法,

      如下所示:

      export default {
          // 接收两个参数
          // app: 应用上下文的实例
          // options:插件输入的选项
          install: (app, options) => {
              console.log('app', app);
              console.log('options', options);
              // 做一些处理
              // ……
          }
      }

      1.2 通过function的方式

      Vue插件也可以是一个function函数,此时插件被调用时会调用function函数本身,

      如下所示:

      export default function TestPlugin(app, options) {
          console.log('app', app);
          console.log('options', options);
      }

      二、使用插件

      上述已经阐述了如何编写自己的插件,插件编写完了之后就需要使用这些插件了,那这些插件应该如何使用呢?其实用起来很简单,应用上下文的实例上提供了对应的use方法。

      app.use(plugin, [options]); // 返回一个应用实例,所以其可以链式添加新的插件

      三、app.use()是如何执行插件的

      为什么app.use()可以使用这些插件呢?本着“知其然而知其所以然”的精神,一起来扒一扒为什么。如下是对应的源码:

      function createApp(rootComponent, rootProps = null) {
          // ……
          const installedPlugins = new Set();
          const app = (context.app = {
              // ……
              use(plugin, ...options) {
                  if (installedPlugins.has(plugin)) {
                      warn(`Plugin has already been applied to target app.`);
                  }
                  else if (plugin && shared.isFunction(plugin.install)) {
                      installedPlugins.add(plugin);
                      plugin.install(app, ...options);
                  }
                  else if (shared.isFunction(plugin)) {
                      installedPlugins.add(plugin);
                      plugin(app, ...options);
                  }
                  else {
                      warn(`A plugin must either be a function or an object with an "install" ` +
                          `function.`);
                  }
                  return app;
              },
              // ……
          });
          return app;
      };

      上述代码读起来很简单,其实现了以下几件事情:

      • 利用Set结构存储插件,当存在该插件时抛出异常;
      • 通过判断是否存在install方法或是否是函数,执行对应的插件;
      • 执行插件时将app上下文实例和options作为参数传入;

       到此这篇关于Vue3.0插件执行原理与实战的文章就介绍到这了,更多相关Vue插件执行原理内容请搜索北冥有鱼以前的文章或继续浏览下面的相关文章希望大家以后多多支持北冥有鱼!

      您可能感兴趣的文章:

      • vue3如何自定义js文件(插件或配置)
      • Vue3 中自定义插件的实现方法
      • Vue3.0利用vue-grid-layout插件实现拖拽布局
      • vue3.0实现插件封装
      • Vue3 中的插件和配置推荐大全

      《Vue3.0插件执行原理与实战.doc》

      下载本文的Word格式文档,以方便收藏与打印。