Vue----列表渲染指令

news/2024/7/10 1:09:39 标签: vue, vue.js, 前端框架, 前端

文章目录

      • 3.9 列表渲染指令
        • 3.9.1 v-for 中的索引
        • 3.9.2 使用 key 维护列表的状态
        • 3.9.3 key 的注意事项


3.9 列表渲染指令

vue 提供了 v-for 指令,用来辅助开发者基于一个数组来循环渲染相似的 UI 结构。 v-for 指令需要使用item in items 的特殊语法,其中:

items 是待循环的数组
item 是当前的循环项

3.9.1 v-for 中的索引

v-for 指令还支持一个可选的第二个参数,即当前项的索引。语法格式为 (item, index) in items。

v-for 指令中的 item 项和 index 索引都是形参,可以根据需要进行重命名。例如 (user, i) in userlist。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <ul>
        <li v-for="(user, i) in list">索引是:{{i}},姓名是:{{user.name}}</li>
      </ul>
    </div>

    <script src="./lib/vue-2.6.12.js"></script>

    <script>
      const vm = new Vue({
        el: '#app',
        data: {
          // 用户列表的数据
          list: [
            { id: 1, name: 'zs' },
            { id: 2, name: 'ls' },
          ],
        },
      })
    </script>
  </body>
</html>

请添加图片描述

3.9.2 使用 key 维护列表的状态

当列表的数据变化时,默认情况下,vue 会尽可能的复用已存在的 DOM 元素,从而提升渲染的性能。但这种默认的性能优化策略,会导致有状态的列表无法被正确更新。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <!-- 在页面中声明一个将要被 vue 所控制的 DOM 区域 -->
  <div id="app">

    <!-- 添加用户的区域 -->
    <div>
      <input type="text" v-model="name">
      <button @click="addNewUser">添加</button>
    </div>

    <!-- 用户列表区域 -->
    <ul>
      <li v-for="(user, index) in userlist">
        <input type="checkbox" />
        姓名:{{user.name}}
      </li>
    </ul>
  </div>

  <script src="./lib/vue-2.6.12.js"></script>
  <script>
    const vm = new Vue({
      el: '#app',
      data: {
        // 用户列表
        userlist: [
          { id: 1, name: 'zs' },
          { id: 2, name: 'ls' }
        ],
        // 输入的用户名
        name: '',
        // 下一个可用的 id 值
        nextId: 3
      },
      methods: {
        // 点击了添加按钮
        addNewUser() {
          this.userlist.unshift({ id: this.nextId, name: this.name })
          this.name = ''
          this.nextId++
        }
      },
    })
  </script>
</body>

</html>

请添加图片描述
请添加图片描述

为了给 vue 一个提示,以便它能跟踪每个节点的身份,从而在保证有状态的列表被正确更新的前提下,提升渲染的性能。此时,需要为每项提供一个唯一的 key 属性。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <!-- 在页面中声明一个将要被 vue 所控制的 DOM 区域 -->
  <div id="app">

    <!-- 添加用户的区域 -->
    <div>
      <input type="text" v-model="name">
      <button @click="addNewUser">添加</button>
    </div>

    <!-- 用户列表区域 -->
    <ul>
      <li v-for="(user, index) in userlist" :key="user.id">
        <input type="checkbox" />
        姓名:{{user.name}}
      </li>
    </ul>
  </div>

  <script src="./lib/vue-2.6.12.js"></script>
  <script>
    const vm = new Vue({
      el: '#app',
      data: {
        // 用户列表
        userlist: [
          { id: 1, name: 'zs' },
          { id: 2, name: 'ls' }
        ],
        // 输入的用户名
        name: '',
        // 下一个可用的 id 值
        nextId: 3
      },
      methods: {
        // 点击了添加按钮
        addNewUser() {
          this.userlist.unshift({ id: this.nextId, name: this.name })
          this.name = ''
          this.nextId++
        }
      },
    })
  </script>
</body>

</html>

请添加图片描述
请添加图片描述

3.9.3 key 的注意事项

① key 的值只能是字符串或数字类型
② key 的值必须具有唯一性(即:key 的值不能重复)
③ 建议把数据项 id 属性的值作为 key 的值(因为 id 属性的值具有唯一性)
④ 使用 index 的值当作 key 的值没有任何意义(因为 index 的值不具有唯一性)
⑤ 建议使用 v-for 指令时一定要指定 key 的值(既提升性能、又防止列表状态紊乱)


http://www.niftyadmin.cn/n/563756.html

相关文章

Vue----过滤器(Vue3弃用)

文章目录4 过滤器(Vue3弃用)4.1 过滤器的定义4.2 私有过滤器和全局过滤器4.3 连续调用多个过滤器4.4 过滤器传参4.6过滤器的兼容性4 过滤器(Vue3弃用) 过滤器&#xff08;Filters&#xff09;是 vue 为开发者提供的功能&#xff0c;常用于文本的格式化。例如&#xff1a;hello…

Vue----单页面应用程序

文章目录1 单页面应用程序1.1 什么是单页面应用程序1.2 单页面应用程序的特点1.3 单页面应用程序的优缺点1.3.1 单页面应用程序的优点1.3.2 单页面应用程序的缺点1.4 如何快速创建 vue 的 SPA 项目1 单页面应用程序 1.1 什么是单页面应用程序 单页面应用程序&#xff08;英文…

Vue----vite 的基本使用

文章目录2 vite 的基本使用2.1 创建 vite 的项目2.1.1 在对应的文件夹下打开命令窗口2.1.2 运行 npm init vite-app 项目名称2.1.3 运行 cd 项目名称2.1.4 运行 npm install2.1.5 运行2.1.6 打开网站2.2 梳理项目的结构2.3 vite 项目的运行流程2.3.1 在 App.vue 中编写模板结构…

cnmcsdn

第一篇欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不…

Vue----vue 组件的构成

文章目录4 vue 组件的构成4.1 vue 组件组成结构4.2 组件的 template 节点4.2.1 在 template 中使用指令4.2.2 在 template 中定义根节点4.3 组件的 script 节点4.3.1 script 中的 name 节点4.3.2 script 中的 data 节点4.3.3 script 中的 methods 节点4.4 组件的 style 节点4.4…

论程序设计语言的学习方法

从刚刚进大学的对程序设计语言的一窍不通到现在已经能敲出一些简单的代码去执行某种算法&#xff0c;机算某些复杂的问题。自己的学习方法主要分为三大类。 一&#xff0c;对于长难的代码要分段解析 代码的执行是按照顺序一步步来&#xff0c;一个难的代码可以分为很多个小块去…

Vue----vue-router 3.x 的基本使用步骤

文章目录2.2 vue-router 3.x 的基本使用步骤2.2.1 在项目中安装 vue-router2.2.2 创建路由模块2.2.3 导入并挂载路由模块2.2.4 声明路由链接和占位符2.2.5 声明路由的匹配规则2.2.6 完成代码main.jsApp.vuesrc/router/index.js2.2 vue-router 3.x 的基本使用步骤 ① 安装 vue-r…

论程序语言学习方法

从刚刚进大学的对程序设计语言的一窍不通到现在已经能敲出一些简单的代码去执行某种算法&#xff0c;机算某些复杂的问题。自己的学习方法主要分为三大类。 一&#xff0c;对于长难的代码要分段解析 代码的执行是按照顺序一步步来&#xff0c;一个难的代码可以分为很多个…