Vue响应式
2021-11-14 10:45:34 0 举报
Vue响应式流程
作者其他创作
大纲/内容
Watcher handle()
执行Watcher的run方法,调用先前传入的回调函数(副作用)
修改数据this.xxx = 123
在this.xxx对应的setter内调用闭包里dep的notify方法
①如果是oldS和E匹配上了,那么真实dom中的第一个节点会移到最后,E指针前移一位, OldS指针后移一位②如果是oldE和S匹配上了,那么真实dom中的最后一个节点会移到最前,匹配上的两个指针向中间移动③如果四种匹配没有一对是成功的,分为两种情况(1)如果新旧子节点都存在key,那么会根据oldChild的key生成一张hash表,用S的key与hash表做匹配,匹配成功就判断S和匹配节点是否为font color=\"#4caf50\
创建Observer并挂载到每一层数据的 _ob_属性上,即一个Observer只负责一个对象型数据。假设vm.data = {span style=\"font-size: inherit;\
defineReactive$$1中对对象类型的属性调用observe方法,形成了递归调用
vm._update()
observe(vm.data)
dep遍历subs数据,调用其中每个Watcher的update方法
为属性添加访问器,使用闭包保存该属性对应的Dep
Watcher是否同步
diff算法
initState()
否
递归
一个Vue实例可能会有多个Watcher,初始化data和props时会创建一个Watcher,computed和watch的每一个属性都会创建一个对应的Watcher
将Watcher加入执行队列中,并在nextTick中注册一个任务,该任务将在负责遍历执行队列中的每一个Watcher,并执行其run方法
是
对新旧子孙节点列表进行递归匹配并pathc(diff算法)
0 条评论
下一页