前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue造Toast轮子引发的思考💡

Vue造Toast轮子引发的思考💡

原创
作者头像
用户7045706
修改2020-03-09 11:07:10
3690
修改2020-03-09 11:07:10
举报
文章被收录于专栏:王二狗的Vue专栏

译者:王二狗undefined博客:掘金思否知乎简书CSDNundefined点赞再看,养成习惯,你们的支持是我持续分享的最大动力😘undefined原文链接:https://www.sitepoint.com/shorthand-javascript-techniques/

最近一直在不停的造Vue轮子,目前已经完成了Button网格布局默认布局Input等轮子。

今天在编写Toast轮子的时候遇到了一个问题,说一说我的思考过程,拿出来和大家分享一下,希望对大家有所帮助。🙌

需求分析

在决定去造一个轮子之前,首先要做的就是需求分析,其中最重要的一步就是你的轮子造出来之后,其他人怎样使用你的轮子。

我希望用到我轮子的用户可以全局去调用我的轮子,就像下面这样:

代码语言:txt
复制
this.$toast()

遇到问题

那么我如何才能做到让用户使用上述方式去调用我的轮子呢?

我首先想到的方法是直接将我的轮子挂载到Vueprototype

代码语言:txt
复制
import Vue from 'vue'
Vue.prototype.$toast = function () {
    console.log('this is my toast');
}

这样做可以是可以,但是存在两个潜在的工程问题

工程问题:在我们的工程项目中会实际发生的问题,其特点就是具有不可预测性,这种不可预测性,往往不是你可以通过目前代码的分析而得出的。

问题一:$toast可能以前就已经有了

如果以前就存在了一个$toast,那么按照你上述的处理方式,你就会覆盖掉原有的$toast

针对这个问题,我最初想到的处理方式是提前对$toast进行一个检测

代码语言:txt
复制
import Vue from 'vue'

if (Vue.prototype.$toast == undefined) {
    Vue.prototype.$toast = function () {
        console.log('i an toast');
    }
}

这种处理方式的问题就在于,如果在这之前$toast真的已经存在了,那你的$toast怎么办?这种处理方式的问题在于侵入性太强了

问题二:很有可能使用你轮子的用户和你的Vue版本不一致

如果使用你轮子的用户所用的Vue版本和你的不一致怎么办?

代码语言:txt
复制
import Vue from 'vue1'
import Vue from 'vue2'
......

墨菲定律

所谓墨菲定律,说的就是小概率事件必将发生,如果你不相信,那么你就存在侥幸心理,你就在自己骗自己。

所以,我们必须要想出合理的方式解决上面遇到的两个工程问题。

解决方案(Vue插件)

最后通过翻阅 Vue 文档,我发现Vue里面的插件可能很好的解决我所遇到的问题。

创建插件:

代码语言:txt
复制
export default {
    instal(){
        Vue.prototype.$toast = function () {
            console.log('i am toast');
        }
    }
}

引入插件:

代码语言:txt
复制
import Plugin from './toast/plugin'
Vue.use(Plugin)

使用轮子:

代码语言:txt
复制
this.$toast()

告诫自己,即使再累也不要忘记学习,成功没有捷径可走,只有一步接着一步走下去。 共勉!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求分析
  • 遇到问题
  • 墨菲定律
  • 解决方案(Vue插件)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档