【发布时间】:2018-05-03 08:11:29
【问题描述】:
我了解 变化检测 在 Angular 5.0 中的工作原理。
谁能帮助我了解 React 中的相同原理以及它与 Angular 的区别有多大?
【问题讨论】:
-
Reacts 使用 Virtual DOM 进行变更检测。查一下! :)
标签: angular reactjs angular2-changedetection virtual-dom
我了解 变化检测 在 Angular 5.0 中的工作原理。
谁能帮助我了解 React 中的相同原理以及它与 Angular 的区别有多大?
【问题讨论】:
标签: angular reactjs angular2-changedetection virtual-dom
React 和 Angular 的变更检测不同,但它们有一个非常重要的共同点——从内存(而不是 DOM)中区分当前和以前的状态,并仅渲染已更改的内容。
在 Angular 中,在高层次上它是这样工作的:
注意:请注意,如果您使用 ChangeDetectionStrategy.OnPush,某些组件及其后代 在树遍历期间可能会省略。这可以是很好的优化。
在 React 中是这样的:
setState 的组件开始。注意:类似于 Angular 的 ChangeDetectionStrategy.OnPush,在 React 中我们有 React.PureComponent 类。我们可以使用这个类来避免不必要的变化检测。
当然还有很多不同,但在高层次上,我认为这些是最重要的。
【讨论】:
React 变更检测与 Angular 大致相同,除了以下三点:
1) 何时开始:每当调用组件的 setState 方法时,就会开始比较(而 Angular 会在触发 Dom 事件、运行 setInterval/setTimeout 回调时以及无论何时ajax 回调运行)
2) 从哪里开始:差异从调用了 setState 的组件开始,然后是它的子组件,然后是层次结构(而 Angular 从最顶层的组件开始)
3) 比较什么: diffing 比较当前 HTML 的虚拟 DOM 和状态改变后的虚拟 DOM。 (而 Angular 使用模板中使用的数据绑定值进行比较之前和之后)
【讨论】: