- dom-diff是指: 所有的 DOM 变动,都先在虚拟 DOM 上发生
- 然后再将实际发生变动的部分,反映在真实 DOM上。可以极大提高网页的性能表现
diff-key
- diff算法把key当成唯一id,然后比对组件的value,来确定是否需要更新;如果没有key,react将不会知道该如何更新组件
不传key也能用,是因为react检测到子组件没有key后,默认将数组的索引作为key
react根据 key 来决定是重新创建组件还是更新组件的原则
- key相同,组件有所变化,react会只更新组件对应变化的属性
- key不同,组件会销毁之前的组件,将整个组件重新渲染
key是专门为React服务的,但是它不会传递给你的组件
- 组件中,你无法通过props.key来获取父级传递 key的值
- key仅仅是绑定到了组件中,作为组件的属性存在,不能作为 props存在
- 也不能通过
this.key
来获取到 key,想获得key的值只能另外设置一个值 - 标识一个属性,例如id,来传递key的值
<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
- 循环子组件一定要加 key
- 兄弟元素之间的key值必须是唯一的,当然不是全局唯一,只是对当前作用域的兄弟元素
- antd Table 中,
dataSource
和columns
里的数据值都需要指定key
值 - 对于
dataSource
默认将每列数据的key
属性作为唯一的标识