本篇内容介绍了“Vue2响应式系统之分支切换怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们考虑一下下边的代码会输出什么。我们来一步一步理清:拦截了中和的,并且各自初始化了一个实例,用来保存依赖它们的对象。data
text
ok
get、set
Dep
Watcher
这一步会执行函数,执行过程中用到的所有对象属性,会将收集到相应对象属性中的中。updateComponent
Watcher
Dep
当然这里的其实是同一个,所以用了指向的箭头。Watcher
这一步会触发,从而执行中所有的,此时就会执行一次。set
Dep
Watcher
updateComponent
执行就会重新读取中的属性,触发,然后继续收集。updateComponent
data
get
Watcher
重新执行函数 的时候:updateComponent
因为的值变为,所以就不会触发的,的就不会变化了。data.ok
false
data.text
get
text
Dep
而会继续执行,触发收集,但由于我们中使用的是数组,此时收集到的两个其实是同一个,这里是有问题,会导致重复执行,一会儿我们来解决下。data.ok
get
Watcher
Dep
Wacher
updateComponent
执行这句的时候,会触发的,所以会执行一次。但从代码来看函数中由于为,对输出没有任何影响,这次执行其实是没有必要的。text
set
updateComponent
updateComponent
data.ok
false
data.text
之所以执行了,是因为第一次执行读取了从而收集了,第二次执行的时候,虽然没有读到,但之前的也没有清除掉,所以这一次改变的时候依旧会执行。updateComponent
data.text
Watcher
updateComponent
data.text
Watcher
data.text
updateComponent
所以我们需要的就是当重新执行的时候,如果已经不依赖于某个了,我们需要将当前从该中移除掉。updateComponent
Watcher
Dep
Watcher
Dep
总结下来我们需要做两件事情。去重,中不要重复收集。Dep
Watcher
重置,如果该属性对中的已经没有影响了(换句话就是,中的已经不会读取到该属性了 ),就将该从该属性的中删除。Dep
Wacher
Watcher
updateComponent
Watcher
Dep
去重的话有两种方案:Dep
中的数组换为。subs
Set
每个对象引入,对象中记录所有的的,下次重新收集依赖的时候,如果的已经存在,就不再收集该了。Dep
id
Watcher
Dep
id
Dep
id
Watcher
Vue2
源码中采用的是方案这里我们实现下:2
Dep
类的话只需要引入即可。id
在中,我们引入来记录所有的。Watcher
this.depIds
id
同样是两个方案:全量式移除,保存所影响的所有对象,当重新收集的前,把当前从记录中的所有对象中移除。Watcher
Dep
Watcher
Watcher
Dep
增量式移除,重新收集依赖时,用一个新的变量记录所有的对象,之后再和旧的对象列表比对,如果新的中没有,旧的中有,就将当前从该对象中移除。Dep
Dep
Watcher
Dep
Vue2
中采用的是方案,这里也实现下。2
首先是类,我们需要提供一个方法。Dep
removeSub
然后是类,我们引入来保存所有的旧对象,引入来保存所有的新对象。Watcher
this.deps
Dep
this.newDe免费云主机域名ps
Dep
回到开头的代码此时修改的话就不会再执行了,因为第二次执行的时候,我们把中里的清除了。data.text
updateComponent
data.text
Dep
Watcher
“Vue2响应式系统之分支切换怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要介绍了Android中如何优化窗口背景的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中如何优化窗口背景文章都会有所收获,下面我们一起来看看吧。一、java免费云主机域名代码中二、在xml文件中首先在res…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。