关于前端视图更新前言接到分享任务后,一直很头疼。不知道要分享什么,所以我可以在这次分享中做得更好。后来无意中在网上看到一篇文章,很有启发,指导我做了这个内容代码地址:(https://codepen.io/collection...代码很精美,就一百多行of代码还原了VUE响应式的核心思想,这段代码我看了半天,感觉自己和尤雨溪在前端水平上还是有很大的差距。(雷军:诗是同样的代码)在mount(准备阶段)通过watchEffect(副作用)分析vue2,判断是否是第一次生成,如果是,则生成DOM解构,通过JS更新到H5(虚拟DOM);如果不是,判断两次传入的代码,判断并更新tag类型,传入的props,判断children(子组件)。并重新渲染不同的部分。Vue2使用Object.defineProperty,通过set劫持数据,使用dep.notify()通知对应的watcher(在watchEffect之上),watcher调用_update更新viewDep,负责生成虚拟DOM刷新页面的Effect(副作用函数)什么时候监听的,答案是第一屏加载的时候。Dep和Watcher是一对多的关系,可以同时监控多组watchEffect数据一个比较完整的流程图总结和outlook官方文档提到VUE3的对象拦截器Object.defineProperty已经被Proxy替代了。经过几次小实验,发现Proxy是Object。defineProperty这个外包就相当于我拦截你的拦截。在网上查了资料,发现defineProperty的优点可能是可以拦截数组,增加删除方法,自由度更高。以上可以解释为什么在VUE2中,我们在子组件中修改传入的obj,会触发父组件的重新渲染。其实就是触发了父组件上监控日期的set劫持。可以推断,在VUE3中传入子组件的对象变成了一个深拷贝的副本,不会再触发这个问题,react也是一样的。(单向数据流思维)写到这里,感觉对前端框架有了更深的理解,觉得自己做前端框架不太对。不可能的。当然,客观的说,这里讨论的只是前端框架原理的一小部分。还有很多优化和功能没有涉及。参考文章https://mp.weixin.qq.com/s/Do...https://www.cnblogs.com/datia...https://www.cnblogs.com/weblf...谢谢观看
