我对 Virtual DOM 及其 diff 算法的了解是,当某些组件(或元素/及其子组件)发生更改时,协调该特定组件和子组件是有效的,因为除此之外,其他组件DOM 组件不会改变。
但是我已经知道,DOM 操作最耗时的部分是重新计算元素样式(如 CSS)的时刻。
如果许多其他组件之间的组件发生变化,例如高度样式发生变化或被卸载,通过这种变化,下面的兄弟组件将受到影响,其中这些组件的样式应该全部重新渲染(重新布局或重新绘制)。
那么,这是否意味着 React 的目标——通过虚拟 DOM 和 diff 算法仅操作 View 的变化部分——无法实现?
是我理解错了,还是这很正常?
如果这是正常情况(由于其他组件中间的组件发生变化,下面的其他组件也必须修改的情况),那么React与普通的DOM操作方法相比,除了批处理之外,还有什么优势还是声明式方法?可以称其为“补丁”吗?
最佳答案
您担心的是,更改父组件的样式可能会触发其子组件的浏览器布局
但是无论你是否使用react的virtual dom,这个问题仍然会出现
React 虚拟 dom 的好处是它聚合 dom 操作并消除冗余操作
与“手动编码”相比,这种广泛的优化通常会导致更少的总 dom 操作
在极少数情况下,通过非常仔细地手动管理 dom 操作,您也许能够在没有 React 虚拟 dom 的情况下产生更优化的结果
“手动”很少值得考虑
关于javascript - 虚拟 DOM 的比较算法是否能够找出唯一的差异并修补真实 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53679719/