在React组件中动态生成UUID作为key是否合理?我的理解正确吗?
你的理解完全正确
下面针对你的思路逐一确认:
- 关于数组索引作为key的问题:确实不能用数组索引当组件key,当数组进行非末尾的增删或排序操作时,元素的索引会发生变化,React的Diff算法会错误地复用组件,导致大量无意义的重渲染,甚至引发组件状态和内容不匹配的问题。
- 关于动态生成UUID作为key的问题:你意识到的问题没错——每次组件重渲染时,
uuidv4()都会生成全新的key,React会把每个列表项都判定为新组件,执行卸载再重新挂载的操作,完全起不到key优化性能的作用,反而会带来额外的性能开销。 - 关于官方建议的稳定key方案:官方提到的给模型新增稳定ID、对内容哈希生成key的思路是正确的。只要哈希是基于内容的稳定特征生成(不添加随机盐),就能保证相同内容每次生成的哈希一致,这样key就具备了稳定性,能让React准确识别组件的复用关系。而且key只需要在同级的列表元素中保持唯一,不需要全局唯一。
内容的提问来源于stack exchange,提问作者A Mehmeto
相关产品推荐
相关产品推荐

