首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Vue中key的作用

描述 首先是官方文档的描述,当Vue正在更新使用v-for渲染的元素列表时,它默认使用就地更新的策略,如果数据项的顺序被改变,Vue将不会移动DOM元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染...为了给Vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key attribute,建议尽可能在使用v-for时提供key attribute,除非遍历输出的...简单来说,当在列表循环中使用key时,需要使用key来给每个节点做一个唯一标识,diff算法就可以正确的识别此节点,找到正确的位置直接操作节点,尽可能地进行重用元素,key的作用主要是为了高效的更新虚拟...在下面的例子中可以看到没有key的情况下列表更新时渲染速度会快,当不存在key的情况下,这个列表直接进行原地复用,原有的节点的位置不变,原地复用元素,将内容更新为5、6、7、8、9、10,并添加了11与...在不设置key的情况下,元素中没有与数据data绑定的部分,Vue会默认使用已经渲染的DOM,而绑定了数据data的部分会进行跟随数据渲染,假如操作了元素位置,则元素中未绑定data的部分会停留在原地,

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    23 列表渲染与“就地复用”原则

    -- 使用数组中的索引 --> li v-for="(item,index) in items">{{index}} {{ item.message }}li> 遍历一个数组时,第二个参数是当起项的零起索引值...-- 使用值范围 --> v-for="n in 10">{{ n }} 这纯粹是一个语法糖了,当被遍历的对象是一个数字时,相当于重复渲染n遍...组件的“就地复用”原则 官档上有这么一段语: 当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。...如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。...如果没给列表项添加key,当在输入框输入内容后,单向向下移动,组件移动,数据不移动;如果设置了key,组件与数据同时移动。

    2.3K20

    在Vue.js编写更好的v-for循环的6种技巧

    1.始终在v-for循环中使用key 首先,我们将讨论大多数Vue开发人员已经知道的常见最佳做法——在 v-for 循环中使用 :key。通过设置一个惟一的键属性,它可以确保组件以您期望的方式工作。...v-if 一个超级常见的错误是使用 v-if 来过滤 v-for 循环的数据。...尽管这看起来很直观,但它会导致一个巨大的性能问题——VueJS优先考虑 v-for 而不是 v-if 指令。 这意味着您的组件将循环遍历每个元素,然后检查 v-if 条件以确定是否应渲染。..._id' v-if='product.price < 50' > {{ product.name }} li> 4.使用计算属性或方法代替 为避免上述问题,我们应该在遍历模板中的数据之前对其进行过滤...与访问元素的索引类似,我们必须向循环中添加另一个值。如果我们用一个参数遍历一个对象,我们将遍历所有的项。

    4K50

    看,官方出品了 Vue 编码风格指南

    当在组件中使用 data 属性的时候 (除了 newVue 外的任何地方),它的值必须是返回一个对象的函数。 详解 当 data 的值是一个对象时,它会在这个组件的所有实例之间共享。...详解 当 Vue 处理指令时, v-for 比 v-if 具有更高的优先级,所以这个模板: li v-for="user in users" v-if="user.isActive...默认情况下,Vue 会尽可能高效的更新 DOM。这意味着其在相同类型的元素之间切换时,会修补已存在的元素,而不是将旧的元素移除然后在同一位置添加一个新元素。...在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。 详解 为了给样式设置作用域,Vue 会为元素添加一个独一无二的特性,例如 data-v-f3f3eg9。...问题在于大量的元素和特性组合的选择器 (比如 button[data-v-f3f3eg9]) 会比类和特性组合的选择器慢,所以应该尽可能选用类选择器。

    1.3K10

    看,官方出品了 Vue 编码风格指南!

    当在组件中使用 data 属性的时候 (除了 newVue 外的任何地方),它的值必须是返回一个对象的函数。 详解 当 data 的值是一个对象时,它会在这个组件的所有实例之间共享。...详解 当 Vue 处理指令时, v-for 比 v-if 具有更高的优先级,所以这个模板: li v-for="user in users" v-if="user.isActive...默认情况下,Vue 会尽可能高效的更新 DOM。这意味着其在相同类型的元素之间切换时,会修补已存在的元素,而不是将旧的元素移除然后在同一位置添加一个新元素。...在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。 详解 为了给样式设置作用域,Vue 会为元素添加一个独一无二的特性,例如 data-v-f3f3eg9。...问题在于大量的元素和特性组合的选择器 (比如 button[data-v-f3f3eg9]) 会比类和特性组合的选择器慢,所以应该尽可能选用类选择器。

    1.4K10

    Vue模板语法

    ② 本网站内部数据可以使用,来自第三方的数据不可以用 v-pre 填充原始信息 ① 显示原始信息,跳过编译过程(分析编译过程) v-text v-text指令用于将数据填充到标签中...-- 只当在 event.target 是当前元素自身时触发处理函数 --> 元素触发的 --> ......注意:v-bind:class指令可以与普通的class特性共存 //1、 v-bind 中支持绑定一个对象 如果绑定的是一个对象 则 键为 对应的类名 值 为对应data中的数据 ​ 设置为none, 控制元素是否显示(已经渲染到了页面) v-show只编译一次,后面其实就是控制css,而v-if不停的销毁和创建,故v-show性能更好一点。...:帮助Vue区分不同的元素,从而提高性能 key来给每个节点做一个唯一标识 key的作用主要是为了高效的更新虚拟DOM li :key='item.id' v-for='(item,index

    6.7K40

    2020前端技术面试必备Vue:(一)基础快速学习篇

    列表渲染 v-for v-for 指令基于一个数组来渲染一个列表。 格式:1....注意 //vm 为Vue实例 var vm = new Vue({ data: { items: ['a', 'b', 'c'] } }) //当你利用索引直接设置一个数组项时 vm.items...-- 只当在 event.target 是当前元素自身时触发处理函数 --> 元素触发的 --> ......://cn.vuejs.org/v2/api/#keyCodes // 虽然Vue 废除了 keyCode事件,但是Vue 提供了绝大多数常用的按键码的别名: .enter .tab .delete...多选时:绑定到一个数组上 值绑定 对于单选按钮,复选框及选择框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值): 把值绑定到 Vue 实例的一个动态属性上,这时可以用 v-bind

    1.9K20

    Vue v-for指令的使用方式以及使用key解决组件问题

    v-for="i in 10">这是第 {{i}} 个P标签 2.2.0+ 的版本里,当在组件中使用 v-for 时,key 现在是必须的。...当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。...如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。...v-for中使用key的注意事项 2.2.0+ 的版本里,当在组件中使用 v-for 时,key 现在是必须的,因为没有key来保障循环中的唯一性,那么组件则会被打乱。...p> 那么这时候就要给上面的组件设置一个key,并且绑定一个string/number类型的数据来保障循环数据的唯一性。

    2K20

    Vue.js-列表渲染 原

    我们用v-for指令根据一组数组的选项列表进行渲染,v-for指令需要以item in items形式的特殊语法,items是源数据数组并且item是数组元素迭代的别名 基本用法 <body class...与v-if v-for的优先级比v-if高,意味着v-if将分别重复运行于每个v-for循环中 li v-for="todo in todos" v-if="todo.isComplete">{{...todo }}li> 上面的代码只传递了未complete的todos 而如果你的目的是有条件的跳过循环的执行,那么将v-if置于包装元素(或上) li v-for="todo in todos"> {{ todo }} li> key 为了给vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素...,Vue不能检测以下变动的数组 1、当你利用索引值直接设置一个项时例如vm.items[indexOfItem]=newValue 2、当你修改数组的长度时例如:vm.items.length =

    2.8K20

    Vue初步认识与Vue基础指令

    单向数据绑定 对于输入框等可输入元素,可设置双向数据绑定 双向数据绑定是在数据绑定基础上,可自动将元素输入内容更新给数据, 实现数据与元素内容的双向绑定。...特点: data中的数据是直接可以在视图中通过插值表达式访问 data的数据为响应式数据,发生改变时,视图会自动更新 特殊情况: data中存在数组时,索引操作和length操作无法自动更新视图...渲染指令 v-for指令 用于遍历数据渲染结构,常用的数组与对象均可遍历 index为数组下的索引值 index为对象下的索引值,key为数据的键值 除了遍历数组和对象,还可以对值进行遍历...可以将部分元素或者内容作为整体进行操作 template标签并不是真正的标签,生成的结构直接是内部的标签 template并不是一个真实的元素,所以没法设置key属性...应用于同一个标签 更好的解决办法:将v-if和v-for分开,比如将v-if放在父元素上 li

    3.1K30

    (31)Vue安装

    -- 创建一个 todo-item 组件的实例 --> 从父作用域将数据传到子组件 Vue.component('todo-item',...清除浮动 添加空div,使用clear: both 父元素使用overflow: hidden 父元素使用overflow: auto 父级定义高度 父级div定义伪类:after和zoom ?...visibility:hidden; 隐藏对应元素 position:absolute/fixed; 优先级最高,有他们在时,float不起作用 清除浮动的方式: 父级div定义height 最后一个浮动元素后加空...div标签 并添加样式clear:both 父级div定义zoom 包含浮动元素的父标签添加样式overflow为hidden或auto :表示伪类,::表示伪元素 this是在执行上下文创建时确定的一个在执行过程中不可更改的变量...父子组件通讯:父->子:使用props,子->父:$emit方法传递参数 .prevent: 提交事件不再重载页面; .stop: 阻止单击事件冒泡; .self: 当事件发生在该元素本身而不是子元素的时候会触发

    1.8K20
    领券