Vue2系列-Vue3小结

118 阅读2分钟

面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!

目录

Vue3小结

Vue3小结

答:Setup、Typescript、Proxy、Composition、性能优化。

setup

答: 新增生命周期setup,setup执行的时机是在beforeCreate生命函数之前执行,使用vue3时候,建议用setup代替beforeCreate、created。

Typescript

Ts强类型语言,可以清晰的了解数据结构等

与编译器相结合,可以在编写阶段就报错,代码效率有了极大提升。

Proxy

在vue2中使用Object.defineProperty的时候,遇到的问题有:

  • 一次只能对一个属性进行监听。(遍历监听所有属性)
  • 在遇到一个对象的属性还是一个对象的情况下,需要递归监听。
  • 对于对象的新增属性,需要手动监听。(vue$set方法)
  • 对于数组通过push、unshift方法增加的元素,也无法监听。(对数组无法监听的方法重写)

这些问题在Proxy中都轻松得到了解决

语法:const p = new Proxy(target, handler) 参数:

  1. target:要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)
  2. handler:一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。
//定义一个需要代理的对象
let person = {
    age: 0,
    school: '西电'
}
//定义handler对象
let hander = {
    get(obj, key) {
        // 如果对象里有这个属性,就返回属性值,如果没有,就返回默认值66
        return key in obj ? obj[key] : 66
    },
    set(obj, key, val) {
        obj[key] = val
        return true
    }
}
//把handler对象传入Proxy
let proxyObj = new Proxy(person, hander)

// 测试get能否拦截成功
console.log(proxyObj.age)//输出0
console.log(proxyObj.school)//输出西电
console.log(proxyObj.name)//输出默认值66

// 测试set能否拦截成功
proxyObj.age = 18
console.log(proxyObj.age)//输出18 修改成功
Composition

答:组合API,类似于React Hook,书写自由,简化逻辑复用。

性能优化
  • 引入了Tree-Shaking,Tree-Shaking带来的bundle体积更小是显而易见的。
  • nextTick、set、delete等要使用es6引入,打包时对没有用到API进行剔除。
  • vdom的重写,例如编译模板的静态标记不再进行diff比较、事件缓存等。

小白也是新手面试官,欢迎领导莅临指导工作,提出建议,小白不胜感激,不喜勿喷,点赞收藏随机送程序媛小姐姐一枚哦!!!