美文网首页
列表渲染时不推荐用index当key

列表渲染时不推荐用index当key

作者: 星晴98 | 来源:发表于2020-03-09 15:50 被阅读0次

许多时候,我看到开发者在渲染一个列表的时候使用列表项的index(在列表中的位置-1)当作列表项的key属性值。

{todos.map((todo, index) =>
  <Todo
    {...todo}
    key={index}
  />
)}

这似乎看起来很恰当,并且做可以消除react的报错(这可能是我们真正关心的)。
但是,这样做是有问题的。那么问题在哪里?

它可能破坏你的程序,让它展示错误的数据。
我来解释下,key是React 用来唯一标识DOM元素的值。如果你向列表中间位置再加一项,或者在中间位置删除一项会发生什么呢?
如果key值和之前的key值一样,则react会觉得前,这两个key值一样的组件,他们对应的DOM元素也是一样的。但,我们如果使用index当作key值,则前后两个key值一样的组件对应的DOM元素就不一样了。

为了演示潜在的危险,我创建了一个简单的例子

当没有值传给key时,React会自动使用列表项的index当作key的值。这是在编码者没有设置key值的情况下,React自己所能做的一个最好的处理。
React会警告您,它不是最佳的处理方式。如果你有为它设置key值,则React会以你设置的值来当作key值。你如果设错了,React也会照做,因为它爱你非常深沉,相信你!

更佳的处理

每个项应该有一个永久不变的且唯一的属性。理论上,它会在这个项被创建的时候一起生成。哈哈,你也许你猜对了,我讲的就是ID。我们可以这样使用它。

{todos.map((todo) =>
  <Todo {...todo}
    key={todo.id} />
)}

注意:你得先看看这些项的属性,你用可以,但至少他们得有id吧?

Index as a key is an anti-pattern

相关文章

  • 列表渲染时不推荐用index当key

    许多时候,我看到开发者在渲染一个列表的时候使用列表项的index(在列表中的位置-1)当作列表项的key属性值。 ...

  • index作为key是反模式

    原文:Index as a key is an anti-pattern 我曾多次看到开发者在渲染列表的时候把列表...

  • Element-UI 问题记录(3/3)

    一. Tags 组件动效异常 使用列表渲染时,如果使用index作为key的话,会导致组件的动效异常。 解决方案:...

  • Vue v-for key 具体有什么用

    比如动态的渲染一个表头,如果用index 作为key,相同key的列元素会复用,导致不重新渲染。

  • Vue.js中v-for为什么要加key?

    1. key有什么用? 为了提升渲染速度。当两个元素位置发生改变时vue不会对整个列表进行重新渲染,而只是更换一下...

  • 关于key

    每当一个列表重新渲染时,React 会根据每一项列表元素的 key 来检索上一次渲染时与每个 key 所匹配的列表...

  • React 从入门到精通 - 为什么不要使用 Index 作为

    在 React 中渲染列表项时,很多开发者喜欢使用 index 作为 key 值,例如: 这段代码看起来没什么问题...

  • vue key的作用

    8.vue中 key 值的作用?答:当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地...

  • vue写tab切换

    一、循环列表渲染时: 点击传入index,用当前索引判断class的切换 data中添加priceIndex 属性...

  • (Vue-cli)九、key值,$nextTick,$force

    1.key值 列表渲染时,key值最好是对象的唯一属性值,比如:学号,工号,身份证号,手机号等等,目的是:当列表更...

网友评论

      本文标题:列表渲染时不推荐用index当key

      本文链接:https://www.haomeiwen.com/subject/lvspdhtx.html