1. dom-diff是指: 所有的 DOM 变动,都先在虚拟 DOM 上发生
  2. 然后再将实际发生变动的部分,反映在真实 DOM上。可以极大提高网页的性能表现

diff-key

  1. diff算法把key当成唯一id,然后比对组件的value,来确定是否需要更新;如果没有key,react将不会知道该如何更新组件
  2. 不传key也能用,是因为react检测到子组件没有key后,默认将数组的索引作为key

  3. react根据 key 来决定是重新创建组件还是更新组件的原则

    1. key相同,组件有所变化,react会只更新组件对应变化的属性
    2. key不同,组件会销毁之前的组件,将整个组件重新渲染
  4. key是专门为React服务的,但是它不会传递给你的组件

    1. 组件中,你无法通过props.key来获取父级传递 key的值
    2. key仅仅是绑定到了组件中,作为组件的属性存在,不能作为 props存在
    3. 也不能通过 this.key 来获取到 key,想获得key的值只能另外设置一个值
    4. 标识一个属性,例如id,来传递key的值
    5. <List key={item.id} id={item.id}>

key值的唯一性

index.js:2177 Warning: [antd: Table] Each record in dataSource of table should have a unique key prop, or set rowKey of Table to an unique primary key, see https://u.ant.design/table-row-key

  1. 循环子组件一定要加 key
  2. 兄弟元素之间的key值必须是唯一的,当然不是全局唯一,只是对当前作用域的兄弟元素
  3. antd Table 中,dataSourcecolumns 里的数据值都需要指定 key
  4. 对于 dataSource 默认将每列数据的 key 属性作为唯一的标识