• vue学习之 v-for key


    v-for key

    • Vue使用 v-for渲染的元素列表时,它默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM元素来匹配数据项的顺序,而是就地更新每个元素。
    • 创建 demo9.html,内容如下
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <!-- 1. 导入 vue 脚本文件 -->
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    
    <body>
        <!-- DOM区域 -->
        <div id="app">
    
            <div>
                <input type="text" v-model="name">
                <button @click="addUser">添加</button>
            </div>
    
            <ul>
                <li v-for="(user,i) in userList">
                    <input type="checkbox" /> index: {{i}} name: {{user.name}}
                </li>
            </ul>
    
        </div>
    
    </body>
    <script>
        const vm = {
            data: function() {
                return {
                    userList: [{
                        id: 1,
                        name: 'zs'
                    }, {
                        id: 2,
                        name: 'ls'
                    }, {
                        id: 3,
                        name: 'ww'
                    }, ]
                }
            },
            methods: {
                addUser() {
                    this.userList.unshift({
                        id: this.nextId,
                        name: this.name
                    })
                    this.name = ''
                    this.nextId++
                }
            },
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
    
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    效果展示

    • 发现,当勾选了zs时,再添加用户,选中的并不是zs
      在这里插入图片描述

    解决办法

    • 为每项提供一个唯一 key,让Vue能跟踪每个节点的身份,从而重用和重新排序现有元素
    • 内容修改如下
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <!-- 1. 导入 vue 脚本文件 -->
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    </head>
    
    <body>
        <!-- DOM区域 -->
        <div id="app">
    
            <div>
                <input type="text" v-model="name">
                <button @click="addUser">添加</button>
            </div>
    
            <ul>
                <li v-for="(user,i) in userList" :key="user.id">
                    <input type="checkbox" /> index: {{i}} name: {{user.name}}
                </li>
            </ul>
    
        </div>
    
    </body>
    <script>
        const vm = {
            data: function() {
                return {
                    userList: [{
                        id: 1,
                        name: 'zs'
                    }, {
                        id: 2,
                        name: 'ls'
                    }, {
                        id: 3,
                        name: 'ww'
                    }, ]
                }
            },
            methods: {
                addUser() {
                    this.userList.unshift({
                        id: this.nextId,
                        name: this.name
                    })
                    this.name = ''
                    this.nextId++
                }
            },
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
    
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    效果展示

    在这里插入图片描述

  • 相关阅读:
    vue3路由
    MNE系列教程1——MNE的安装与基本绘图
    UE Select File / Folder Window 插件说明
    JVM学习笔记——内存结构篇
    腾讯升级员工关怀方案:入职满 15 年可提前退休
    django定时任务(django-crontab)
    sklearn中make_blobs方法:聚类数据生成器
    【实践篇】Redis最强Java客户端(四)之Ression分布式集合使用指南
    Linux 文件系统
    1、Elasticsearch 8.X 概述与安装
  • 原文地址:https://blog.csdn.net/qq_36940806/article/details/132797867