心在旅行

文章 评论 浏览 29

心在旅行 2022-05-04 13:57:54

看完了所有的答案,好像都没有一个实际案例来说明没有key的时候带来的问题以及有key的时候是如何解决的,下面给大家跑一个案例:

<template>
  <ul>
    <li v-for="item in list">{{item.name}}</li>
  </ul>
  <button @click="changeList">删除列表</button>
</template>

<script>
export default {
  data () {
    return {
      list: []
    }
  },
  mounted () {
    this.list = Array.from({length: 10}).map((_,index) => {
      return {
        name: index,
        id: index
      }
    })
    this.$nextTick(()=>{
      let listNodes = document.getElementsByTagName("li")
      listNodes[0].setAttribute("active", true)
    })
  },
  methods: {
    changeList () {
        this.list.splice(0,1, {
          name: 9,
          id: 9
        })
    }
  }
}
</script>

在这里有一个列表, 在创建之后被别有用心之人第一项的属性上加了一个setAttribute("active", true),然后点击按钮更新了第一条数据,你会发现列表第一条的属性”active“依然存在,但如果加上了key,这个属性就消失了。那么就说明key在这里的作用就是创建了一个全新的节点,替换掉了原来的节点。
还有一个例子是给任意一个节点绑定一个动态的key,然后设置一个按钮,每次点击就更新这个key值,你会发现,这个节点会不断的进行更新(这也是一个强制更新组件的一个方法)

第 1 题:写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文