持续更新…
1. vue 响应式原理以及双向绑定实现代码 ? 🌟
v-model本质就是一个语法糖,可以看成是value + input方法的语法糖。
可以通过model属性的prop和event属性来进行自定义。原生的v-model,会根据标签的不同生成不同的事件和属性。
Vue事件绑定原理
原生事件绑定是通过addEventListener绑定给真实元素的,组件事件绑定是通过Vue自定义的$on实现的。
2. vue3 响应式原理,有什么不同?
Vue3.x改用Proxy替代Object.defineProperty。因为Proxy可以直接监听对象和数组的变化,并且有多达13种拦截方法。并且作为新标准将受到浏览器厂商重点持续的性能优化。
- vue 的 diff 算法思路,怎么对比节点?
- vue 的 compile 实现?🌟
5. vue 如何自定义指令?具体的 api 写法?
6. vue3 对于 vue2 在性能上的优化(从 compile 和 runtime 两方面)?
react 有什么不同?了解 hooks 吗?
7.再说一下Computed和Watch
computed : 当一个属性受多个属性影响的时候就需要用到 computed ,最典型的栗子:购物车商品结算的时候
watch : 当一条数据影响多条数据的时候就需要用 watch ,栗子:搜索数据
Computed本质是一个具备缓存的watcher,依赖的属性发生变化就会更新视图。
适用于计算比较消耗性能的计算场景。当表达式过于复杂时,在模板中放入过多逻辑会让模板难以维护,可以将复杂的逻辑放入计算属性中处理。
Watch没有缓存性,更多的是观察的作用,可以监听某些数据执行回调。当我们需要深度监听对象中的属性时,可以打开deep:true选项,这样便会对对象中的每一项进行监听。这样会带来性能问题,优化的话可以使用字符串形式监听,如果没有写到组件中,不要忘记使用unWatch手动注销哦。
8.说一下v-if和v-show的区别
// 简单回答
当条件不成立时,v-if不会渲染DOM元素,v-show操作的是样式(display),切换当前DOM的显示和隐藏。
// 详细回答
共同点: 都能控制元素的显示和隐藏;
不同点: 实现本质方法不同,v-show 本质就是通过控制 css 中的 display 设置为 none,控制隐藏,只会编译一次;v-if 是动态的向 DOM 树内添加或者删除 DOM 元素,若初始值为 false ,就不会编译了。而且 v-if 不停的销毁和创建比较消耗性能。总结:如果要频繁切换某节点,使用 v-show (切换开销比较小,初始开销较大)。如果不需要频繁切换某节点使用 v-if(初始渲染开销较小,切换开销比较大)。
9.组件中的data为什么是一个函数?
保证复用性,避免数据污染(多个组件公用一个内存地址)
一个组件被复用多次的话,也就会创建多个实例。本质上,这些实例用的都是同一个构造函数。如果data是对象的话,对象属于引用类型,会影响到所有的实例。所以为了保证组件不同的实例之间data不冲突,data必须是一个函数。
10.keep-alive了解吗
keep-alive可以实现组件缓存,当组件切换时不会对当前组件进行卸载。
常用的两个属性include/exclude,允许组件有条件的进行缓存。
// include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;
两个生命周期activated/deactivated,用来得知当前组件是否处于活跃状态。
keep