用 index 当 key,删除或插入后复用的还是旧节点,状态就串了。
典型表现是输入框内容、勾选状态跟着行号跑,不是跟着数据走。
key 要取数据自带的唯一字段,比如 id 或后端返回的业务编号。
列表会重排就绝对不要用 index,纯静态列表才勉强可以。
<!-- 反例:删除首项后,剩下的行会复用旧的 DOM 状态 -->
<li v-for="(item, index) in list" :key="index">{{ item.name }}</li>
<!-- 正例:用数据自带的稳定唯一值 -->
<li v-for="item in list" :key="item.id">{{ item.name }}</li>
<!-- 数据里没有唯一值时,一次性造一个稳定字段,别退回 index
const rows = ref(raw.map(r => ({ ...r, uid: genUid() }))) -->
<!-- 复现技巧:列表每行放一个输入框,删掉第一行,
看剩下行的输入内容是不是错位跟着 index 走了 -->
THE END






暂无评论内容