Vue基础Vue技术面试加工厂

vue原理相关

2021-03-27  本文已影响0人  斗伽

Vue核心概念

MVVM

model和view层通过中间的vm连接和驱动。model层数据变化会改变视图,view改变通过事件来修改数据。vue参考了MVVM实现了双向绑定,react是MVC; 但是vue仍然可以通过refs/parent等操作dom,所以不全是mvvm

vue模板解析

虚拟dom

VDom:三部曲

可以查看本文作者写的另一篇详解虚拟 DOM 的文章《深入剖析:Vue核心之虚拟DOM》https://juejin.cn/post/6844903895467032589#heading-14

vue的双向数据绑定、响应式原理

响应式设计重要的三个对象;

image.png

如何亮点解答??

1、在生命周期的initState方法中将data,prop,method,computed,watch中的数据劫持, 通过observe方法与Object.defineProperty方法将相关对象转为换Observer对象。

2、然后在initRender方法中解析模板,通过Watcher对象,Dep对象与观察者模式将模板中的 指令与对象的数据建立依赖关系,使用全局对象Dep.target实现依赖收集。

3、当数据变化时,setter被调用,触发Object.defineProperty方法中的dep.notify方法, 遍历该数据依赖列表,执行器update方法通知Watcher进行视图更新(微任务异步更新)。

  1. vue是无法检测到对象属性的添加和删除,但是可以使用全局Vue.set方法(或vm.$set实例方法)。

  2. vue无法检测利用索引设置数组,但是可以使用全局Vue.set方法(或vm.$set实例方法)。

  3. 无法检测直接修改数组长度,但是可以使用splice;

再去结合vue3做的相关优化,阐述;

Object.defineProperty?


Proxy(数据劫持优化)

区别:

1、语法层面上

defineProperty只能响应首次渲染时候的属性,

Proxy需要的是整体监听,不需要关心里面有什么属性,而且Proxy的配置项有13种,可以做更细致的事情,这是之前的defineProperty无法达到的。

2、兼容层面上

vue2.x之所以只能兼容到IE8就是因为defineProperty无法兼容IE8,其他浏览器也会存在轻微兼容问题。

proxy的话除了IE,其他浏览器都兼容,这次vue3还是使用了它,说明vue3直接放弃了IE的兼容考虑。

image.png image.png

数据发生变化后,dom是怎么更新的?流程?  === watcher.update怎么样更新视图? 将watcher放入一个更新队列里。

待解答、、patch、diff
  https://juejin.cn/post/6947514223169798175#heading-1
上一篇下一篇

猜你喜欢

热点阅读