Vue----列表渲染指令

文章目录

      • 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>Documenttitle>
  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>Documenttitle>
head>

<body>
  
  <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----列表渲染指令_第1张图片
Vue----列表渲染指令_第2张图片

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

DOCTYPE html>
<html lang="en">

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

<body>
  
  <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>

Vue----列表渲染指令_第3张图片
Vue----列表渲染指令_第4张图片

3.9.3 key 的注意事项

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

你可能感兴趣的:(Vue.js,vue,vue.js,前端框架,前端)