React Reconciliation

2020-02-18  本文已影响0人  shuxiaotai

React Reconciliation

一.什么是Reconciliation

  1. 每次render的时候,React都会产生一棵由React元素组成的树,这个树形结构就是所谓的虚拟DOM,下次render的时候又会产生新的一颗树,对比这两棵树的不同的过程,就是调和,即Reconciliation

二.对比过程,分为以下几种情况

1. 根节点类型不同的情况
<div>
  <Counter />
</div>

<span>
  <Counter />
</span>
2.根节点类型相同的情况

如下,只会更改color变化的值和div里变化的值

<div style={{color: 'red', fontWeight: 'bold'}}>hello world</div>

<div style={{color: 'green', fontWeight: 'bold'}}>good bye</div>
3.多个同级元素的情况
//最下方插入

<ul>
  <li>first</li>
  <li>second</li>
</ul>

<ul>
  <li>first</li>
  <li>second</li>
  <li>third</li>
</ul>

//最上方插入

<ul>
  <li>first</li>
  <li>second</li>
</ul>

<ul>
  <li>third</li>
  <li>first</li>
  <li>second</li>
</ul>
//最上方插入

<ul>
  <li key={1}>first</li>
  <li key={2}>second</li>
</ul>

<ul>
  <li key={0}>third</li>
  <li key={1}>first</li>
  <li key={2}>second</li>
</ul>

三.代码优化思考

1.以前早就听说过不要用数组下标作为Key,但是现在才对Key值需要唯一且稳定有了深刻理解,具体理解见上面的【1】,数组下标作为Key也不是一棒子打死,当这些元素不需要重新排序的时候,可以采用,当这个元素需要重新排序的时候,就不要用数组下标了

2.也不要用Math.random()作为Key

3..针对React对根节点类型不同的情况的处理,在写代码的时候就要避免改变根节点的情况

上一篇 下一篇

猜你喜欢

热点阅读