摘要:但是我一直信奉一个原则,即但凡复杂的知识,理解之后都只需要记忆简单的东西,而想简单精确描述一个复杂知识,是极困难的事。两个相同的节点,虚拟会认为是同一个节点,从而对其进行比较。
前言:
关于react的虚拟dom以及每次渲染更新的dom diff,网上文章很多。但是我一直信奉一个原则,即:但凡复杂的知识,理解之后都只需要记忆简单的东西,而想简单、精确描述一个复杂知识,是极困难的事。
正文dom diff是什么?
1.从根节点开始遍历所有节点;
2.对于不同类型的标签,删除原标签,新建标签;
3.对于类型相同、属性不同的标签,只修改属性;
4.对于同一个父节点下的复数同类型标签(即列表类型),基于key对比、修改。
-遍历用的是前序遍历(先序遍历)
关于2:-不同类型的标签是指:比如div和span就是不同类型的标签
-如果同一个位置的标签类型改变(依然以div和span为例),那么直接删除div标签,新建一个span标签,重新渲染。原本的div标签里的一切都跟新的span标签没有关系
-对于自定义的组件比如
-标签位置只相对于父节点有意义。假设原本A节点的父节点是B,更新后A节点的父节点是C,那么对于dom diff来说,原本的A节点会被销毁,在C节点下的A节点是一个新的节点,跟原本的A节点没有关系
-这一个比较好理解,对于仅仅属性不同的标签,修改属性即可
关于4-假设一个div下有五个span节点,此时我们要插入一个节点
虚拟dom并不知道插入后是ABFCDE,而会认为除了AB以外的节点都改变了
所以对于虚拟dom来说此时是ABGHIJ,付出了额外的消耗。
于是react引入了key的概念。两个key相同的节点,虚拟dom会认为是同一个节点,从而对其进行比较。引入了key之后,react就知道节点是ABFCDE了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/103628.html
摘要:作者两年经验第一家任职的是个小公司第二家算是二线互联网公司各待了一年吧能有机会去阿里面试很惊喜先来和大家分享一下面试经历电话面试初探因为还在职的缘故电话面试从晚上点钟开始持续了半个小时左右一开始的时候特比紧张甚至声音略有些颤抖简单自我介绍做 作者两年经验, 第一家任职的是个小公司, 第二家算是二线互联网公司, 各待了一年吧... 能有机会去阿里面试很惊喜! 先来和大家分享一下面试经历....
摘要:但在中会有些不同,包含表单元素的组件将会在中追踪输入的值,并且每次调用回调函数时,如会更新,重新渲染组件。在构造函数中调用的目的是什么在被调用之前,子类是不能使用的,在中,子类必须在中调用。将使用单个事件监听器监听顶层的所有事件。 已经开源 地址:https://github.com/nanhupatar...关注我们团队:showImg(https://segmentfault.co...
摘要:对同一层级的子节点进行处理时,会根据进行简要的复用。二性能优化方案由于中性能主要耗费在于阶段的算法,因此性能优化也主要针对算法。此时最常用的优化方案即为方法。或者直接使用,原理一致。 一、从React原理谈起 react是什么? showImg(https://segmentfault.com/img/bVbcYvf?w=1140&h=384); react是用于构建用户界面的JS框架...
阅读 3406·2021-11-25 09:43
阅读 3464·2021-11-19 09:40
阅读 2464·2021-10-14 09:48
阅读 1283·2021-09-09 11:39
阅读 1920·2019-08-30 15:54
阅读 2821·2019-08-30 15:44
阅读 1994·2019-08-29 13:12
阅读 1542·2019-08-29 12:59