8.Reconciliation

React版本:15.4.2
**翻译:xiyoki **

React提供了一个声明式API,所以你不必担心每次更新的确切更改。这使得编写应用程序更容易,但是在React中更新是如何实现的可能不明显。本文解释了我们在React的‘diffing’算法中做出的选择,以便组件更新是可预测,同时高性能应用程序也足够快。

Motivation

当你使用React时,在单个时间点,你可以将该render()函数想象为创建一个React元素树。在下一个state或props更新时,该render()函数将返回一个不同的React元素树。React然后需要找出如何有效地更新UI以匹配最新的树。
对于生成将一个树变换成另一个树的最小操作数的算法问题,存在一些通用解决方案。然而, state of the art algorithms具有大约 O(n3)的复杂性,其中n是树中的元素数量。
如果我们在React中使用它,显示1000个元素将需要大约十亿此比较。这太贵了。相反,React基于两个假设实现启发式O(n)算法:

  1. 不同类型的两个元素将产生不同的树。
  2. 开发者可以暗示,在具有key prop的不同渲染之间,哪些子元素是稳定的。

在实践中,这些假设对于几乎所有实际使用情况都是有效的。

The Diffing Algorithm(差分算法)

当差分两棵树时,React首先比较两个根元素。根据根元素的类型,行为是不同的。

Elements Of Different Type(不同类型的元素)

每当根元素具有不同类型时,React将拆除旧树并从头开始构建新树。从, 或从

, 或从

你可能感兴趣的:(8.Reconciliation)