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插件执行原理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue3.0实现插件封装

      最近公司有一个新的项目,项目框架是我来负责搭建的,所以果断选择了Vue3.x+ts.vue3.x不同于vue2.x,他们两的插件封装方式完全不一样.由于项目中需要用到自定义提示框,所以想着自己封装一个.vue2.x提供了一个vue.extend的全局方法.那么vue3.x是不是也会提供什么方法呢?果然从vue3.x源码中还是找到了.插件封装的方法,还是分为两步. 1.组件准备   按照vue3.x的组件风格封装一个自定义提示框组件.在props属性中定义好.需要传入的数据流. <templa

  • Vue3.0利用vue-grid-layout插件实现拖拽布局

    目录 1.插件 2.插曲 3.实现 4.校验函数 1.插件 首先,我们选择的插件是vue-grid-layout npm i vue-grid-layout --save 官网:https://jbaysolutions.github.... 2.插曲 安装完依赖,发现项目能启动起来,按照官网demo发现页面空白,控制台提示没有找到子组件 改变思路,不使用局部引入组件,使用全局引入组件. 3.实现 const layout = ref<LayoutItem[]>([ { x: 0, y: 0,

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

    目录 一.编写插件 1.1 包含install()方法的Object 1.2 通过function的方式 二.使用插件 三.app.use()是如何执行插件的 一.编写插件 Vue项目能够使用很多插件来丰富自己的功能,例如Vue-Router.Vuex……,这么多插件供我们使用,节省了我们大量的人力和物力,那这些插件是开发出来的呢?是不是我们自己也想拥有一个属于自己的vue插件,下面就展示一下如何写一个自己的Vue插件. 1.1 包含install()方法的Object Vue插件可以是一个包含

  • mybatis-plugin插件执行原理解析

    mybatis-plugin插件执行原理 今天主要是在看mybatis的主流程源码,其中比较感兴趣的是mybatis的plugin功能,这里主要记录下mybatis-plugin的插件功能原理. plugin集合列表:在构建SqlSessionFactory时,通过解析配置或者plugin-bean的注入,会将所有的mybatis-plugin都收集到Configuration对象的interceptorChain属性中.InterceptorChain类定义如下: public class I

  • Vue2.X和Vue3.0数据响应原理变化的区别

    defineProperty 定义对象的属性,只不过属性里的get和set实现了响应式. 常用: value属性值 get set writeable 是否可写 enumrable 可遍历 Vue从改变一个数据到发生改变的过程  Vue2.X数据响应原理 创建页面,实现延时2s修改对象的值. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>LearnVue

  • Java中OAuth2.0第三方授权原理与实战

    目录 RFC6749 OAuth 2.0授权4大模式 合同到期后的续约机制 OAuth2.0第三方授权实战 oauth-client oauth-server RFC6749 OAuth2的官方文档在RFC6749:https://datatracker.ietf.org/doc/html/rfc6749 以王者荣耀请求微信登录的过程为例 A:Client申请访问用户资源 B:用户授权(过程较复杂)一次有效 C:Client向Server请求一个长时间有效的token D:返回token E:使

  • Vue3.0手写轮播图效果

    本文实例为大家分享了Vue3.0手写轮播图效果的具体代码,供大家参考,具体内容如下 让我们开始把 html结构 <template> <div class="xtx-carousel" @mouseleave="enterFn" @mouseenter="leaveFn"> <ul class="carousel-body"> <li class="carousel-item

  • Vue3.0数据响应式原理详解

    基于Vue3.0发布在GitHub上的第一版源码(2019.10.05)整理 预备知识 ES6 Proxy,整个响应式系统的基础. 新的composition-API的基本使用,目前还没有中文文档,可以先通过这个仓库(composition-api-rfc)了解,里面也有对应的在线文档. 先把Vue3.0跑起来 先把vue-next仓库的代码clone下来,安装依赖然后构建一下,vue的package下的dist目录下找到构建的脚本,引入脚本即可. 下面一个简单计数器的DEMO: <!DOCTY

  • vue3.0响应式函数原理详细

    目录 1.reactive 2.ref 3.toRefs 4.computed 前言: Vue3重写了响应式系统,和Vue2相比底层采用Proxy对象实现,在初始化的时候不需要遍历所有的属性再把属性通过defineProperty转换成get和set.另外如果有多层属性嵌套的话只有访问某个属性的时候才会递归处理下一级的属性所以Vue3中响应式系统的性能要比Vue2好. 接下来我们自己实现Vue3响应式系统的核心函数(reactive/ref/toRefs/computed/effect/trac

  • 茶余饭后聊聊Vue3.0响应式数据那些事儿

    "别再更新了,实在是学不动了"这句话道出了多少前端开发者的心声,"不幸"的是 Vue 的作者在国庆区间发布了 Vue3.0 的 pre-Aplha 版本,这意味着 Vue3.0 快要和我们见面了.既来之则安之,扶我起来我要开始讲了.Vue3.0 为了达到更快.更小.更易于维护.更贴近原生.对开发者更友好的目的,在很多方面进行了重构: 使用 Typescript 放弃 class 采用 function-based API 重构 complier 重构 virtual

随机推荐