VUE v-for中的:key详解

当在 Vue 的模板中使用 v-for 来循环渲染一组 DOM 元素时,每个被渲染的元素都要有一个唯一的 key 属性。这个属性在 Vue 的模板编译器中扮演着非常重要的角色,它可以帮助 Vue 跟踪每个被渲染的元素的身份和状态,从而优化渲染效果。

key 的作用

一个简单的示例,我们假设一个列表,其中有一些元素是需要从列表中删除的,那么删除时就需要更新数据源,并调用 Vue 中的 splice() 方法,在更新后, DOM 会进行重渲染。但是,由于 Vue 是采用高效的 “就地重用” 策略,并且不会每次都创建新的 DOM 元素,而是尽可能的复用已经存在的元素,然后在 JavaScript 中对其进行更新。

如果没有为 v-for 循环中的每个元素提供一个唯一的 key,那么 Vue 可能无法识别新的更新内容,并且会把之前存在的元素错误的重复使用到更新过的 DOM 中。如果你提供了一个唯一的 key,Vue 在进行 DOM 操作时就会基于 key 来决定使用已有的节点或者生成新节点。

key 的用法

v-for 模板中使用 key,只需要在被循环的元素上增加 :key 属性即可。例如:

<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.title }}</li>
  </ul>
</template>

在上面的例子中,我们假设数组 items 中的每个元素都有一个 id 属性。Vue 将使用 id 属性来映射每个 DOM 节点,并且当更新数组 items 时,会根据节点的 key 值来决定是否进行原地更新、添加或删除。

v-for 中的 key 详解

  1. 在使用 v-for 循环渲染列表时,key 必须保证其唯一性,最好是使用数组中的唯一标识符作为 key,比如 item.id
  2. key 属性的值必须是简单数据类型(可以是数字、字符串或布尔值),而不是对象或数组等引用类型。
  3. 如果你使用不合适的 key 值,会发生错误,比如 key 值重复等。
  4. 当在循环渲染时,如果没有为每个元素指定 key 属性,Vue 会强制要求你添加它,否则会有一个警告。
  5. 不要使用非唯一或不相关的值,如索引值,作为 key,这会导致性能变差,并可能影响到渲染结果。

示例1

以下是一个简单的示例,展示了如何将数组中的元素渲染为一个列表,并且使用 key 属性来跟踪每个元素。

<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' },
        { id: 4, name: 'Grape' },
      ]
    }
  }
}
</script>

在上面的代码中,我们为 li 标签增加了 :key 属性,并且使用了每个元素的 id 属性作为其值。当更新数组中的元素时,Vue 会根据 key 的值来决定是否重用已有元素或创建新的元素。

示例2

以下是另一个示例,其中演示了当列表项的数量发生更改时,渲染新元素和删除旧元素的行为。在这个例子中,我们添加了一个按钮,除了不改变列表中的示例外,它会在每个单击操作时随机添加或删除一个元素。

<template>
  <div>
    <button @click="handleClick">{{ buttonLabel }}</button>
    <ul>
      <li v-for="item in items" :key="item.id">{{ item.title }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, title: 'Apple' },
        { id: 2, title: 'Banana' },
        { id: 3, title: 'Orange' },
        { id: 4, title: 'Grape' },
      ],
      buttonLabel: 'Add/Remove',
    }
  },
  methods: {
    handleClick() {
      const index = Math.floor(Math.random() * 4);
      if (this.items.length >= 4) {
        this.items.splice(index, 1);
      } else {
        this.items.push({
          id: Math.floor(Math.random() * 1000),
          title: 'New Item'
        });
      }
    }
  }
}
</script>

在上面的代码中,我们使用 v-for 循环渲染了一个 Ul 元素,并且为每个 li 元素指定了唯一的 key 属性。当单击按钮时,代码会随机添加或删除一个元素,从而演示了 key 属性的作用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VUE v-for中的:key详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 公共Hooks封装文件下载useDownloadFile实例详解

    我会为你详细讲解“公共Hooks封装文件下载useDownloadFile实例详解”的完整攻略。 什么是公共Hooks 公共Hooks是指在React项目中,可以被多个组件共享的可重用代码片段。它们通常被封装在统一的模块中,以便于其他组件引用和使用。 useDownloadFile Hook useDownloadFile Hook是一个公共Hooks封装文…

    Vue 2023年5月28日
    00
  • 如何利用vue.js实现拖放功能

    要利用Vue.js实现拖放功能,需遵循以下步骤: 步骤一:添加Vue.js和拖放依赖包 在实现Vue.js拖放功能之前,需要添加Vue.js和相关的拖放依赖包。可以通过使用npm或直接链接到CDN来引入这些依赖。 <script src="https://cdn.jsdelivr.net/npm/vue"></scrip…

    Vue 2023年5月28日
    00
  • Vuex模块化与持久化深入讲解

    Vuex模块化与持久化深入讲解 1. 什么是Vuex模块化和持久化? Vuex是一个专为Vue.js设计的状态管理库,它通过集中式存储管理应用的所有组件的状态,方便实现复杂组件间的数据共享。其中,Vuex模块化指的是将一些具有复杂业务逻辑或多个子模块组成的Vuex store分成多个小模块,以增加代码可维护性和复用性。Vuex持久化指的是通过存储到local…

    Vue 2023年5月28日
    00
  • vue 根据选择的月份动态展示日期对应的星期几

    要实现“vue 根据选择的月份动态展示日期对应的星期几”,可以考虑以下步骤: 首先,你需要使用vue组件构建一个日历。可以使用第三方组件库,如Vuetify,或根据自己的需求自行构建。 然后,你需要在组件中添加一个月份选择器,以便用户可以选择日期所在的月份。可以使用第三方组件库,如ElementUI的DatePicker组件,或根据自己的需求自行构建。 当用…

    Vue 2023年5月29日
    00
  • Vite引入虚拟文件的实现

    Vite 是一个现代化的前端构建工具,其最大的特点是快速的冷启动速度。其中一个实现方式是通过 “虚拟文件” 实现的。 什么是虚拟文件 在 Vite 中,虚拟文件是指一些文件在磁盘上并不存在,但在构建过程中,它们被用作常规的原始文件来进行依赖分析和构建过程。这样,在构建项目前,已经打包的文件在一个 Map 结构的内存中进行了缓存,减少了构建时不必要的时间消耗。…

    Vue 2023年5月28日
    00
  • Vue.js实现大屏数字滚动翻转效果

    Vue.js实现大屏数字滚动翻转效果攻略 什么是大屏数字滚动翻转效果 大屏数字滚动翻转效果是指在Web页面中,通过JavaScript实现数字滚动翻转效果,使数字在变化的过程中呈现出一种动态的翻转效果。这种效果常用于数字展示类页面,如实时数据监控页面、股票行情展示页面等。 如何使用Vue.js实现大屏数字滚动翻转效果 在Vue.js中,我们可以通过以下步骤实…

    Vue 2023年5月27日
    00
  • 详解如何理解vue的key属性

    以下是详解如何理解vue的key属性的完整攻略: 1. 什么是Vue的key属性? Vue中的key属性是在使用v-for指令时用来提高性能和防止数据混乱的重要属性。key属性可以为每个v-for循环中的子元素设定一个唯一的标识符,Vue在渲染虚拟DOM节点时会根据key属性来判断哪些节点需要被更新,从而减少页面重新渲染的量,提高页面性能。 2. 如何理解V…

    Vue 2023年5月28日
    00
  • 使用Vite+Vue3+TypeScript 搭建开发脚手架的详细过程

    下面我来详细讲解如何使用Vite+Vue3+TypeScript搭建开发脚手架。 准备工作 首先我们需要安装Node.js和npm。安装好后,通过以下指令可以检查Node.js和npm是否已正确安装并获取所安装的版本: node -v npm -v 接下来我们需要安装Vue CLI和Vite脚手架工具,可以通过以下指令进行安装: npm install -g…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部