待完善
- 当根节点为不同类型的元素时,React 会拆卸原有树并建立新树
- 当对比两个相同类型的 React 元素时,React 会保留 DOM 节点,仅比对及更新有改变的属性
- 当一个组件更新时,组件实例会保持不变,因此可以在不同的帧保持 state 一致。React 将更新该组件实例的 props 以保证与最新的元素保持一致,并且调用该实例的 componentWillReceiveProps()、componentWillUpdate()、componentDidUpdate()
- 当子元素拥有 key 时,React 使用 key 来匹配原有树上的子元素以及最新树上的子元素,使得树的转换效率得以提高
- Key 应该具有稳定,可预测,以及列表内唯一的特质,不稳定的 key(比如通过 Math.random() 生成的)会导致许多组件实例和 DOM 节点被不必要地重新创建,这可能导致性能下降和子组件中的状态丢失
- 也可以使用元素在数组中的下标作为 key。这个策略在元素不进行重新排序时比较合适,如果有顺序修改,diff 就会变慢