用途:在渲染列表、将数组映射为组件或排查列表相关状态问题时,指导 key prop 的正确用法。
核心原则:为列表元素使用稳定、唯一的 ID,绝不要对动态列表使用数组索引。key prop 在 React 协调过程中为列表元素提供稳定身份。理想 key 应唯一(无两项共享同一 key)、稳定(组件生命周期内不变)、可预测(直接绑定数据项)。
使用方式:优先直接使用数据中的 id: {todos.map((todo) => ( <li key={todo.id}>{todo.text}</li> ))}
当数据缺少 ID 时,在接收数据时一次性生成: import { nanoid } from 'nanoid';
useEffect(() => { fetch('/api/items') .then(res => res.json()) .then(data => { const itemsWithIds = data.map(item => ({ ...item, _tempId: nanoid() // Stable ID generated once })); setItems(itemsWithIds); }); }, []);
仅当全部条件满足时索引才可接受:列表完全静态、除末尾外从不增删项、顺序从不变化、项无内部状态。
应避免的反模式:不要在渲染期间生成 key(如 key={Math.random()}),否则每次渲染都会销毁并重建所有组件;不要对动态列表使用索引,当从开头或中间增删项、顺序变化(排序、过滤)或项含内部状态(如表单输入)时会出错——索引代表位置而非数据身份;不要用 useId() 作为列表 key,该 Hook 用于无障碍(关联 label 与 input)。
限制与参考:资料未提供更多平台、收费或效果信息。参考 React 文档 Rendering Lists 与 nanoid。