我了解更改检测在Angular 5.0中的工作原理。
有人可以帮助我了解React中的相同工作原理以及它与Angular 的不同之处吗?
我了解更改检测在Angular 5.0中的工作原理。
有人可以帮助我了解React中的相同工作原理以及它与Angular 的不同之处吗?
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 使用模板中使用的数据绑定值,前后进行比较)