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

茶已备好,只待君来!感谢关注 前端点线面 (>‿<),本号定期推荐原创深度好文,帮助每一位在前端领域打拼的伙伴们走向前列,此外关注我获取最前沿知识点、海量学习资料、《前端百题斩》、大量思维导图,并进前端划水交流群。

一、编写插件

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;
};

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

  1. 利用Set结构存储插件,当存在该插件时抛出异常;

  2. 通过判断是否存在install方法或是否是函数,执行对应的插件;

  3. 执行插件时将app上下文实例和options作为参数传入;

················ 执鸢者简介 ·················

大家好,我是执鸢者,毕业于华中科技大学,新时代农民工,现在是百度前端研发工程师,著有《前端百题斩》、数十篇学习思维导图(go、React、Redux、Vue、Vuex、操作系统、Linux、设计模式、js、webpack、nginx)以及大量前端进阶文章,大量同学已通过号主的系列内容获取心仪的offer,关注我获取海量资料、交流工作心得并进卧虎藏龙交流群。

Vue3.0插件执行原理与实战_第1张图片

识别方二维码加我微信、拉你进交流

Vue3.0插件执行原理与实战_第2张图片

[1] 五万字前端面试宝典

[2] 纯CSS实现beautiful按钮

[3] 一张思维导图入门React

[4] 一文搞定Diff算法

[5] 16张图入门Nginx

[6] 好记性不如烂笔头——Vue3.0篇

[7] 好记性不如烂笔头——Vuex篇

[8] 好记性不如烂笔头——Linux篇

[9]好记性不如烂笔头——React篇

[10] 好记性不如烂笔头——Redux篇

你可能感兴趣的:(vue,java,python,js,react)