与 Vue 不相同,React 使用 JS / JSX 的表达式组合而成,并没有所谓的指令。要用原生 JS 的方法来进行渲染。
JSX 一般使用 Array.prototype.map 方法来进行列表渲染
点击查看【codepen】
列表中的每个子元素都必需一个唯一的 key 属性值
- key 是 React 查看 元素是否改变 的一个唯一标识
- key 必须在兄弟节点中唯一,确定的(兄弟节点是一个列表中的兄弟元素)
不建议使用 index 做为 key 值 (禁止)
建立在列表顺序改变、元素增删的情况下
- 列表项增删或顺序改变了,index 的对应项就会改变
- key 对应的项还是之前列表情况的对应元素的值
- 导致状态混乱,查找元素性能就会变差
如果列表静态不可以操作的,可以选择 index 作为 key,但也不推荐,因为很有可能这个列表在以后维护 扩展的时候,有可能变更为可操作的列表
好的做法:
- 尽量避免使用 index
- 可以用数据的 ID (有可能 ID 会变动)
- 使用动态生成一个静态 ID
- nanoid
key 赋值的正确姿势
点击查看【codepen】
对于需要多次 map 多层渲染,React 建议把每层提取为一个子组件,以提升性能。