vue常见面试题

一、响应式原理?

vue中的三个核心类:

1、Observer:给对象的属性添加getter和setter、用于依赖收集和派发更新

2、Dep:用于收集当前响应式对象的依赖关系,每个响应式对象都有一个dep实例;dep.subs = watcher[](dep.subs就是一个watcher数组);当数据发生变更的时候,会通过dep.notify()通知各个watcher

3、Watcher:观察者对象,分为render watcher、computed watcher、user watcher?

依赖收集:

1、initState阶段, 对computed属性初始化时,会触发computed watcher依赖收集

2、initState阶段,对监听属性初始化时,会触发user watcher依赖收集

3、render阶段,会触发render watcher依赖收集

派发更新:

Object.defineProperty

1、组件中对响应的数据进行了修改,会触发setter逻辑

2、当数据发生变更的时候,触发dep.notify()逻辑

3、dep遍历所有subs,调用每一个watcher的update方法

总结原理:当创建vue实例时,vue会遍历data里的属性,Object.defineProperty为属性添加getter和setter对数据的读取进行劫持

getter:依赖收集

setter:派发更新

每个组件的实例都会有对应的watcher实例,当数据发生变更时,触发以上123?

二、计算属性的实现原理?

computed watcher,计算属性的监听器,持有一个dep实例,通过dirty属性标记计算属性是否需要重新求值,当computed的依赖值改变的时候,就会通知订阅的watcher进行更新,对于computed watcher会将dirty属性设置为true,并且进行计算属性方法的调用

computed 所谓的缓存是什么?缓存的意义或实际应用?

计算属性是基于它的响应式依赖进行缓存的,只有依赖发生改变的时候才会重新求值、未改变的时候获取的是以前存的值;比如计算属性方法内部极度耗时、遍历极大数组时下次计算命中缓存节省时间?

三、Vue.nextTick原理

vue是异步执行dom更新的,一旦观察到数据变化,把同一个event loop中观察数据变化的watcher推送进这个队列,在下一次事件循环时,vue会清空异步队列,并进行dom更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值