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

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

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

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

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

    1.始终在v-for循环中使用key 首先,我们将讨论大多数Vue开发人员已经知道的常见最佳做法——在 v-for 循环中使用 :key。通过设置一个惟一的键属性,它可以确保组件以您期望的方式工作。..._id' > {{ product.name }} li> 2.在一个范围内循环 尽管大多数情况下,v-for 用于遍历数组或对象,但在某些情况下,我们肯定只希望循环执行一定次数...尽管这看起来很直观,但它会导致一个巨大的性能问题——VueJS优先考虑 v-for 而不是 v-if 指令。 这意味着您的组件将循环遍历每个元素,然后检查 v-if 条件以确定是否应渲染。...首先,我们只需要设置一个计算属性,为了获得与之前的v-if相同的功能,代码应如下所示。...与访问元素的索引类似,我们必须向循环中添加另一个值。如果我们用一个参数遍历一个对象,我们将遍历所有的项。

    4K50

    Vue中key的作用

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

    1.1K10

    多人协作开发Vue统一代码风格

    和 v-for 同时用在同一个元素上。...当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级 一般要用到 v-for 与 v-if 连用时, 会将 v-for 的数据 进行 computed 处理后返回对应的数据 来使用 computed...user.id" > {{ user.name }} li> 为组件样式设置作用域 在为组件写CSS 样式时, 如果不为你单个组件样式添加样式作用域的话,它会影响全局样式.../logo.png" alt="Vue Logo" > 让计算属性更简单 当每个计算属性都包含一个非常简单且很少依赖的表达式时,撰写测试以确保其正确工作就会更加容易。...scoped 中使用 元素选择器 在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。 ​

    1.2K00

    Vue多人协作开发规范统一指南

    v-if 和 v-for 同时用在同一个元素上。...❝ 当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级 一般要用到 v-for 与 v-if 连用时, 会将 v-for 的数据 进行 computed 处理后返回对应的数据 来使用...:key="user.id" > {{ user.name }} li> 为组件样式设置作用域 ❝在为组件写CSS 样式时, 如果不为你单个组件样式添加样式作用域的话,.../logo.png" alt="Vue Logo" > 让计算属性更简单 ❝ 当每个计算属性都包含一个非常简单且很少依赖的表达式时,撰写测试以确保其正确工作就会更加容易。...scoped 中使用 元素选择器 ❝在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。

    1.7K10

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

    当在组件中使用 data 属性的时候 (除了 newVue 外的任何地方),它的值必须是返回一个对象的函数。 详解 当 data 的值是一个对象时,它会在这个组件的所有实例之间共享。...详解 当 Vue 处理指令时, v-for 比 v-if 具有更高的优先级,所以这个模板: li v-for="user in users" v-if="user.isActive...详解 更简单、命名得当的计算属性是这样的: 易于测试 当每个计算属性都包含一个非常简单且很少依赖的表达式时,撰写测试以确保其正确工作就会更加容易。...这意味着其在相同类型的元素之间切换时,会修补已存在的元素,而不是将旧的元素移除然后在同一位置添加一个新元素。如果本不相同的元素被识别为相同,则会出现意料之外的结果。...在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。 详解 为了给样式设置作用域,Vue 会为元素添加一个独一无二的特性,例如 data-v-f3f3eg9。

    1.3K10

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

    当在组件中使用 data 属性的时候 (除了 newVue 外的任何地方),它的值必须是返回一个对象的函数。 详解 当 data 的值是一个对象时,它会在这个组件的所有实例之间共享。...详解 当 Vue 处理指令时, v-for 比 v-if 具有更高的优先级,所以这个模板: li v-for="user in users" v-if="user.isActive...详解 更简单、命名得当的计算属性是这样的: 易于测试 当每个计算属性都包含一个非常简单且很少依赖的表达式时,撰写测试以确保其正确工作就会更加容易。...这意味着其在相同类型的元素之间切换时,会修补已存在的元素,而不是将旧的元素移除然后在同一位置添加一个新元素。如果本不相同的元素被识别为相同,则会出现意料之外的结果。...在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。 详解 为了给样式设置作用域,Vue 会为元素添加一个独一无二的特性,例如 data-v-f3f3eg9。

    1.4K10

    (31)Vue安装

    在使用Vue的时候,推荐安装Vue Devtools https://github.com/vuejs/vue-devtools#vue-devtools Browser devtools extension...v-for="todo in todos"> {{ todo.text }} li> var app4 = new Vue({ el: '#...清除浮动 添加空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是在执行上下文创建时确定的一个在执行过程中不可更改的变量

    1.8K20

    Vue的使用你学会了吗?

    在使用Vue的时候,推荐安装Vue Devtools https://github.com/vuejs/vue-devtools#vue-devtools Browser devtools extension...v-for="todo in todos"> {{ todo.text }} li> var app4 = new Vue({ el: '...overflow: hidden 父元素使用overflow: auto 父级定义高度 父级div定义伪类:after和zoom #test { position: absolute; width...visibility:hidden; 隐藏对应元素 position:absolute/fixed; 优先级最高,有他们在时,float不起作用 清除浮动的方式: 父级div定义height 最后一个浮动元素后加空...div标签 并添加样式clear:both 父级div定义zoom 包含浮动元素的父标签添加样式overflow为hidden或auto :表示伪类,::表示伪元素 this是在执行上下文创建时确定的一个在执行过程中不可更改的变量

    1.4K50

    2.vue常用指令

    methods:{ } }) 常用的键别名:enter,tab,delete,esc,space,up,down,left,right self 当事件在该元素本身触发时...有一种尝试复用dom的机制,如果已经在的dom,会复用之前的dom,但是这并不是我们想要的效果,这个时候就可以给他加一个key值,告诉vuejs,这是唯一的,是不能复用的input 解决方案:只需要给所有的...v-if,而是推荐使用v-show 如果元素kennel永远也不会被显示出来被用户看到,则推荐使用 v-if 自己总结: v-if: 判断是否加载,可以减轻服务器的压力,在需要时加载。...-- item为数组中的每项元素--> li v-for="item in arr">{{item}}li> v-for 的优先级比 v-if 更高 这意味着 v-if 将分别重复运行于每个 v-for 循环中;但是这种优先机制,有时候也是非常有用的

    7410

    Vue基础:条件渲染、列表渲染、事件处理

    -- item 是数组元素 --> li v-for="item in items"> {{ item.message }} li> <!...= Object.assign({}, this.someObject, { a: 1, b: 2 }) 注意:当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用”...当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。 这意味着 v-if 将分别重复运行于每个 v-for 循环中。...当你想为仅有的一些项渲染节点时,这种优先级的机制会十分有用,如下: li v-for="todo in todos" v-if="!....stop:阻止单击事件冒泡 .prevent:禁止默认行为 .capture:使用事件捕获模式 .self:只当事件在该元素本身(比如不是子元素)触发时触发回调【不接受冒泡上来的事件】 .once:点击事件将只会触发一次

    1.9K41
    领券