Vue2响应式系统之分支切换怎么实现


本篇内容介绍了“Vue2响应式系统之分支切换怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们考虑一下下边的代码会输出什么。我们来一步一步理清:拦截了中和的,并且各自初始化了一个实例,用来保存依赖它们的对象。datatextokget、setDepWatcher这一步会执行函数,执行过程中用到的所有对象属性,会将收集到相应对象属性中的中。updateComponentWatcherDep当然这里的其实是同一个,所以用了指向的箭头。Watcher这一步会触发,从而执行中所有的,此时就会执行一次。setDepWatcherupdateComponent执行就会重新读取中的属性,触发,然后继续收集。updateComponentdatagetWatcher重新执行函数 的时候:updateComponent因为的值变为,所以就不会触发的,的就不会变化了。data.okfalsedata.textgettextDep而会继续执行,触发收集,但由于我们中使用的是数组,此时收集到的两个其实是同一个,这里是有问题,会导致重复执行,一会儿我们来解决下。data.okgetWatcherDepWacherupdateComponent执行这句的时候,会触发的,所以会执行一次。但从代码来看函数中由于为,对输出没有任何影响,这次执行其实是没有必要的。textsetupdateComponentupdateComponentdata.okfalsedata.text之所以执行了,是因为第一次执行读取了从而收集了,第二次执行的时候,虽然没有读到,但之前的也没有清除掉,所以这一次改变的时候依旧会执行。updateComponentdata.textWatcherupdateComponentdata.textWatcherdata.textupdateComponent所以我们需要的就是当重新执行的时候,如果已经不依赖于某个了,我们需要将当前从该中移除掉。updateComponentWatcherDepWatcherDep总结下来我们需要做两件事情。去重,中不要重复收集。DepWatcher重置,如果该属性对中的已经没有影响了(换句话就是,中的已经不会读取到该属性了 ),就将该从该属性的中删除。DepWacherWatcherupdateComponentWatcherDep去重的话有两种方案:Dep中的数组换为。subsSet每个对象引入,对象中记录所有的的,下次重新收集依赖的时候,如果的已经存在,就不再收集该了。DepidWatcherDepidDepidWatcherVue2源码中采用的是方案这里我们实现下:2Dep类的话只需要引入即可。id在中,我们引入来记录所有的。Watcherthis.depIdsid同样是两个方案:全量式移除,保存所影响的所有对象,当重新收集的前,把当前从记录中的所有对象中移除。WatcherDepWatcherWatcherDep增量式移除,重新收集依赖时,用一个新的变量记录所有的对象,之后再和旧的对象列表比对,如果新的中没有,旧的中有,就将当前从该对象中移除。DepDepWatcherDepVue2中采用的是方案,这里也实现下。2首先是类,我们需要提供一个方法。DepremoveSub然后是类,我们引入来保存所有的旧对象,引入来保存所有的新对象。Watcherthis.depsDepthis.newDe免费云主机域名psDep回到开头的代码此时修改的话就不会再执行了,因为第二次执行的时候,我们把中里的清除了。data.textupdateComponentdata.textDepWatcher“Vue2响应式系统之分支切换怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Android中如何优化窗口背景

这篇文章主要介绍了Android中如何优化窗口背景的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中如何优化窗口背景文章都会有所收获,下面我们一起来看看吧。一、java免费云主机域名代码中二、在xml文件中首先在res…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 04/16 17:13
Next 04/16 17:13

相关推荐