VueJS 列表渲染
-
-
-
维持状态
当 Vue 更新用 v-for 渲染的元素列表时,默认情况下,它使用“就地补丁”策略。 如果数据项的顺序已更改,则 Vue 不会移动 DOM 元素以使其与项的顺序匹配,而是会在适当位置修补每个元素,并确保其反映应在该特定索引处呈现的内容。 这类似于 Vue1.x 中 track-by = "$index" 的行为。此默认模式是有效的,但是仅当列表呈现输出不依赖于子组件状态或临时 DOM 状态(例如,表单输入值)时才适用。为了给 Vue 一个提示,使其可以跟踪每个节点的身份,从而重用和重新排列现有元素,您需要为每个项目提供唯一的 key 属性:建议尽可能在 v-for 中提供键属性,除非迭代的 DOM 内容很简单,或者您故意依赖默认行为来提高性能。由于这是 Vue 识别节点的通用机制,因此该键还具有其他用途,这些用途并不专门与 v-for 绑定,我们将在本指南的后面部分看到。请勿将对象和数组之类的非原始值用作v-for键。 请改用字符串或数字值。
-
数组的变异方法
Vue 封装了观察到的数组的变异方法,因此它们也将触发视图更新。包装的方法是:- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
您可以打开控制台,并通过调用它们的变异方法来处理前面的示例的 items 数组。 例如:example1.items.push({message:'Baz'})。顾名思义,变异方法会变异调用它们的原始数组。 相比之下,也有非变异方法,例如 filter(),concat() 和 slice() 不会改变原始数组,但总是返回一个新数组。 使用非变异方法时,可以将旧数组替换为新数组:您可能会认为这将导致 Vue 丢弃现有 DOM 并重新呈现整个列表-幸运的是,事实并非如此。 Vue 实现了一些智能试探法,以最大化 DOM 元素的重用,因此,用另一个包含重叠对象的数组替换一个数组是非常有效的操作。
-
-
v-for 与组件
您可以像任何普通元素一样直接在自定义组件上使用 v-for:在2.2.0+中,当对组件使用v-for时,现在需要一个key。
但是,这不会自动将任何数据传递给组件,因为组件具有各自独立的作用域。 为了将迭代的数据传递到组件中,我们还应该使用 props:不自动将项目注入组件的原因是,这使组件与v-for的工作原理紧密耦合。 明确说明其数据来自何处使得该组件可在其他情况下重用。下面演示了一个简单的 TodoList 的完整示例:注意 is=“todo-item” 属性。 这在 DOM 模板中是必需的,因为在 <ul> 中只有 <li> 元素有效。 它的作用与 <todo-item> 相同,但是可以解决潜在的浏览器解析错误