2022-02-26 v-for 中使用 key

news/2024/7/9 23:54:31 标签: vue

使用 v-for 更新已渲染的元素列表时,默认用就地复用策略;列表数据修改的时候,他会根据 key 值去判断某个值是否修改,如果修改,则重新渲染这一项,否则复用之前的元素。

何时使用何种 key?

vue 采用原地复用策略,虚拟 dom 变化时,两个虚拟 dom 节点的 key 如果一样就不会重新创建节点,而是修改原来的节点。

当渲染的数据不需要保持状态时,例如常见的单纯的表格分页渲染(不包含输入,只是展示)、下拉加载更多等场景,那么使用 index 作为 key 再好不过,因为进入下一页或者上一页时就会原地复用之前的节点,而不是重新创建,如果使用唯一的 id 作为 key 反而会重新创建dom,性能相对较低。

此外使用 index 作为 key 还应该要尽量避免对数组的中间进行 增加/删除 等会影响后面元素 key 变化的操作。这会让 vue 认为后面所有元素都发生了变化,导致多余的对比和原地复用。

所以使用 index 作为 key 需要满足:

  1. 数据没有独立的状态
  2. 数据不会进行 增加/删除 等会影响后面元素 key 变化的操作

何时使用 id 作为 key?

分页数据展示,如果使用 id 作为 key,每一页的每一条数据 id 都是不一样的,所以当换页时两颗虚拟DOM树的节点的 key 完全不一致,vue 就会移除原来的节点然后创建新的节点,效率会更加低下。但是它也有它的优点,唯一的 key 可以帮助 diff 更加精确地绑定状态,这尤其适合数据有独立的状态的场景,例如带输入框或者单选框的列表数据。

所以何时使用 id 作为 key:

  1. 无法使用 index 作为 key 的时候

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

相关文章

2022-02-27 Vue 中使用 KeepAlive

在一些渲染成本比较高的组件需要被经常切换时,可以使用 keep-alive 来缓存这个组件。 而在使用 keep-alive 后,被 keep-alive 包裹的组件在经过第一次渲染后的 vnode 以及 DOM 都会被缓存起来,然后在下一次再次渲染该组件的时候,…

2022-02-28 viewport

<meta name"viewport" content"width500, initial-scale1">width&#xff1a;页面宽度&#xff0c;可以取值具体的数字&#xff0c;也可以是 device-width&#xff0c;表示跟设备宽度相等height&#xff1a;页面高度&#xff0c;可以取值具体的数字&…

2022-03-01 CSS方式隐藏页面元素

opacity: 0&#xff1a;本质上是将元素的透明度将为0&#xff0c;就看起来隐藏了&#xff0c;但是依然占据空间且可以交互visibility: hidden&#xff1a;与上一个方法类似的效果&#xff0c;占据空间&#xff0c;但是不可以交互了overflow: hidden&#xff1a;这个只隐藏元素溢…

2022-03-02 模块化

模块化开发在现代开发中已是必不可少的一部分&#xff0c;它大大提高了项目的可维护、可拓展和可协作性。通常&#xff0c;我们在浏览器中使用 ES6 的模块化支持&#xff0c;在 Node 中使用 commonjs 的模块化支持。 分类 es6&#xff1a;import / exportcommonjs&#xff1a…

2022-03-03 Vue 重置 data

使用 Object.assign()vm.$data 可以获取当前状态下的 datavm.$options.data(this) 可以获取到组件初始化状态下的 dataObject.assign(this.$data, this.$options.data(this))

2022-03-04 购买阿里云服务器ECS搭建个人网站

基础配置 付费模式&#xff1a;包年包月地域及可用区&#xff1a;华南3&#xff08;广州&#xff09;实例规格&#xff1a;突发性能实例 t6镜像&#xff1a;公共镜像 CentOS 7.4 64位存储&#xff1a;高效云盘 20GiB 网络和安全组 网络&#xff1a;默认专有网络带宽计费模式…

2022-03-05 使用 putty 远程连接阿里云服务器

打开 putty&#xff0c;在光标处输入云服务器ECS实例的公网IP地址&#xff0c;点击 Open输入云服务器的登录名 root 及自定义的登录密码进入宝塔面板官网&#xff0c;选择 Linux 版&#xff0c;立即安装&#xff0c;复制 Centos 安装命令到 putty 远程连接工具窗口安装安装完成…

2022-03-06 宝塔面板部署 vue+node 项目

打开宝塔面板&#xff0c;在软件商店中搜索安装 Nginx、MySQL 和 PM2管理器点击左侧导航的 文件&#xff0c;进入到 /www/wwwroot 目录&#xff0c;将后端项目文件夹中的 node_modules 文件夹删除后&#xff0c;上传后端项目文件夹到此处进入上传的后端项目文件夹&#xff0c;点…