美文网首页
自制UI框架

自制UI框架

作者: YukiWeng | 来源:发表于2019-12-20 14:51 被阅读0次

    代码
    使用文档

    搭建

    vue + parcel (后期改用vue-cli)
    测试采用 karma + mocha
    持续集成 Travis CI

    好用的工具

    vue.js devtools 适用于chrome浏览器和Firefox浏览器的插件
    安装后,可在浏览器控制台查看vue组件

    易踩坑的点

    1.浏览器兼容性

    :root{
       --height:32px
    }
    div{
       height:var(--height)
    }
    // :root的兼容性较低,用scss变量的方式更优
    $height:32px 
    div{height:$height}
    
    array.includes(value)
    // indexOf 兼容性更高
    array.indexOf(value)>=0 
    

    2.父子组件的生命钩子顺序:
    父created -> 子created -> 子mounted -> 父mounted

    3.异步测试需要传done,且时长不可超过2000ms

    it('可以接受position',(done)=>{
      ...
      setTimeout(()=>{
        ...
        done()
      },1500)
    })
    

    4.html标签字母不可大写,可用短横杆,vue会自动转为驼峰

    5.插件:
    假如,在toast组件中

    import Vue from 'vue'
    Vue.prototype.$toast=function(){}
    

    那么用户引入这个组件时,可能存在两个问题:
    (1).import Vue from 'vue'
    我无法确定,用户使用的是vue2或是vue3等
    (2).Vue.prototype.$toast
    我无法确定,用户本身是否已经使用过属性名$toast,这个做法侵入性太强
    即使用if判断,也不一定万无一失
    故,更好的办法是,将我的插件放在一个文件,如 plugin.js
    用户使用时,引入这个插件文件,并 Vue.use(plugin),此时会把他本身的Vue传入
    Vue.prototype.$toast虽然可能重名,但用户可以自己决定是否使用这个插件

    export default {
        install(Vue,options){
            //这里的Vue,是通过用户Vue.use()传入的Vue
            Vue.prototype.$toast=function () {
          
            }
        }
    }
    

    6.获取页面元素属性失败,可能是因为渲染尚未完成
    $nextTick()可解决大部分问题
    但需要注意,$nextTick用微任务microtask 作为异步延迟包装器,优先度特别高,比冒泡还快。
    故有些时候会出现奇怪的bug
    (vue2.5版本改用 macrotask 结合 microtask,但2.4和2.6是microtask )

    7.假如props里数据类型是Object
    default不能直接默认一个对象,而应该用一个函数return一个对象
    原因:每个组件中,export defalut{},这个{}对象是构造组件的选项。
    若props的数据default直接是一个对象,
    假如页面中有两个相同组件(都用了这个对象),当其中一个改变closeButton的值,那么另一个也会受影响
    (浅拷贝,引用同一个对象地址)
    非object类型是深拷贝,不会互相影响

    相关文章

      网友评论

          本文标题:自制UI框架

          本文链接:https://www.haomeiwen.com/subject/lbbbnctx.html