logo
ReactWork

为什么 React 列表里不建议用数组下标当 key?

用下标当 key 时,列表重排或增删会导致子组件状态挂错节点,出现输入框错位、动画乱跳等问题。

keyreconciliationlist

Updated Mar 30, 2026

短答案

key 用来标识「同一项」在多次渲染中是否还是同一个。用 index 时,中间插入/删除会让后面的项 index 全变,React 会误复用错误子树,本地 state/DOM 就对不上。稳定 key 应用内容 id 或稳定业务主键。

展开说明

和 fiber 协调的关系、什么情况下 index 勉强可用(静态只读列表)、和 key 变化会 remount 等。

真实场景

表格可编辑行、可拖拽排序、条件渲染子列表时,用 index 做 key 后用户改到一半,光标跑到别的行。

追问

  • key 变了会发生什么?
  • 为什么不要用随机数当 key?
  • Fragment 要不要 key?