v-for 要用 key,且不能是 index和 random 随机数

简介: v-for 要用 key,且不能是 index和 random 随机数

v-for 要用 key

v-for 要用 key 的原因可详见 vue 原理中的 diff 算法

其核心要领在于,diff 算法中通过 tag 和 key 来判断是否是同一个节点,使用 key 能减少渲染次数,提升渲染性能。

key 不能使用 random 随机数

因为随机数每次渲染时都会变化,按 diff 算法的比较规则,因 key 值的不同,就会视为节点发生了变化,而引发所有 v-for 节点的再次渲染。

key 不能使用 index

key 使用 index 或 无 key 时,在某些场景中会引发 diff 算法 的误判,导致页面错误的渲染。

比如包含输入框时,若 key 使用 index

左侧的内容重新排序了,但右侧输入框内容并没有同步变化。

完整演示代码如下:

<template>
  <div style="margin: 30px">
    <button @click="sort">重新排序</button>
    <div v-for="(item, index) in list" :key="index">
      {{ item }}
      <input type="input" placeholder="请输入" />
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [1, 3, 2, 4],
    };
  },
  methods: {
    sort() {
      this.list.sort();
    },
  },
};
</script>

修正方案:将 key 改为 item

<template>
  <div style="margin: 30px">
    <button @click="sort">重新排序</button>
    <div v-for="item in list" :key="item">
      {{ item }}
      <input type="input" placeholder="请输入" />
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [1, 3, 2, 4],
    };
  },
  methods: {
    sort() {
      this.list.sort();
    },
  },
};
</script>

达到预期效果!

目录
相关文章
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
iframe 在线预览pdf、word、excel、ppt、txt、图片、视频
|
监控 网络协议 Unix
go程序报错Unix syslog delivery error
记录一下问题出错原因
3197 0
|
存储 测试技术 开发工具
软考中的UML图、数据流图等二十余种示例
软考中的UML图、数据流图等二十余种示例
2165 0
SpringBoot2+Mybatis两个数据源实现 (二)
SpringBoot2+Mybatis两个数据源实现 (二)
296 0
|
JavaScript
vue项目获取本机局域网IP地址
局域网下获取本机 IP 地址方便访问 vue 项目
3201 0
|
JavaScript
Vue中v-if失效问题(数据更新,页面没有发生变化)
Vue中v-if失效问题(数据更新,页面没有发生变化)
Vue中v-if失效问题(数据更新,页面没有发生变化)
|
关系型数据库 MySQL 数据安全/隐私保护
查看mysql 默认端口号和修改端口号
1. 登录mysql mysql -u root -p //输入密码    2. 使用命令show global variables like 'port';查看端口号 mysql> show global variables like 'port';    3. 修改端口,编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出。
23429 0
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
219 2
|
JavaScript
Vue3搜索框(InputSearch)
这篇文章介绍了如何在Vue 3中创建一个具有搜索、清除、加载状态等多功能的搜索框组件(InputSearch),并提供了组件的配置选项、事件处理和使用示例。
1193 6
Vue3搜索框(InputSearch)