Pate One · 基础篇
举例:监控 data 中, obj.a 的变化。
3、虚拟 DOM 方案相对原生 DOM 操作有什么优点,实现上是什么原理?
虚拟 DOM 可提升性能, 无须整体重新渲染, 而是局部刷新。实现原理为 JS 对象, diff 算法。
4、vue 和 jQuery 的区别
-
jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。
-
Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,数据和View是分离的。
5、谈谈你对 MVVM 开发模式的理解(VUE)
MVVM 分为 Model、View、ViewModel 三者。
Pate Two · 提高篇
1、自定义指令(v-check、v-focus)的方法有哪些?它有哪些钩子函数?还有哪些钩子函数参数?
-
全局定义指令:在vue对象的directive方法里面有两个参数,一个是指令名称,另外一个是函数。组件内定义指令:directives
-
钩子函数:bind(绑定事件触发)、inserted(节点插入的时候触发)、update(组件内相关更新)
-
钩子函数参数:el、binding
2、写 React/Vue 项目时为什么要在组件中写 key,其作用是什么?
key 的作用是为了在 diff 算法执行时更快的找到对应的节点,提高 diff 速度。vue 和 react 都是采用 diff 算法来对比新旧虚拟节点,从而更新节点。
3、v-if 和 v-show 有什么区别?
v-show 仅仅控制元素的显示方式,将 display 属性在 block 和 none 来回 46切换;而 v-if 会控制这个 DOM 节点的存在与否。当我们需要经常切换某个元素的显示/隐藏时,使用 v-show 会更加节省性能上的开销;当只需要一次显示或隐藏时,使用 v-if 更加合理。
4、vue中子组件调用父组件的方法
-
第一种方法是直接在子组件中通过this.$parent.event来调用父组件
-
第二种方法是在子组件里用$emit向父组件触发一个事件,父组件监听这个事件
-
第三种都可以实现子组件调用父组件的方法。
5、computed和watch有什么区别
computed
-
computed是计算属性,也就是计算值,它更多用于计算值的场景
-
computed具有缓存性,computed的值在getter执行后是会缓存的,只有在它依赖的属性值改变之后,下一次获取computed的值时重新调用对应的getter来计算
-
computed适用于计算比较消耗性能的计算场景
watch
-
watch更多的是观察的作用,类似于某些数据的监听回调,用于观察props $emit或者本组件的值,当数据变化时来执行回调进行后续操作
-
无缓存性,页面重新渲染时值不变化也会执行
Pate Three · Vue3.0
1、为什么Vue3.x改用Proxy替代Object.defineProperty?
4、Proxy 与 Object.defineProperty 优势对比
-
Proxy 可以直接监听对象而非属性
-
Proxy 可以直接监听数组的变化
-
Proxy 有多达 13 种拦截方法,不限于 apply、ownKeys、deleteProperty、has 等等是 Object.defineProperty 不具备的
-
Proxy 返回的是一个新对象,我们可以只操作新的对象达到目的,而 Object.defineProperty 只能遍历对象属性直接修改
-
Proxy 作为新标准将受到浏览器厂商重点持续的性能优化,也就是传说中的新标准的性能红利
- 兼容性好,支持 IE9,而 Proxy 的存在浏览器兼容性问题,而且无法用 polyfill 磨平,因此 Vue 的作者才声明需要等到下个大版本( 3.0 )才能用 Proxy 重写