优先级 D 的规则:谨慎使用
大约 1 分钟
没有在 v-if / v-else-if / v-else 中使用 key
如果一组 v-if + v-else 的元素类型相同,最好使用 key (比如两个 <div> 元素)。
默认情况下,Vue 会尽可能高效的更新 DOM。这意味着其在相同类型的元素之间切换时,会修补已存在的元素,而不是将旧的元素移除然后在同一位置添加一个新元素。如果本不相同的元素被识别为相同,则会出现意料之外的结果。
正例:
<div v-if="error" key="search-status"> 错误:{{ error }} </div> <div v-else key="search-results"> {{ results }} </div>
反例:
<div v-if="error"> 错误:{{ error }} </div> <div v-else> {{ results }} </div>
scoped 中的元素选择器
元素选择器应该避免在 scoped 中出现。
在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。
详解:
为了给样式设置作用域,Vue 会为元素添加一个独一无二的 attribute,例如
data-v-f3f3eg9。然后修改选择器,使得在匹配选择器的元素中,只有带这个 attribute 才会真正生效 (比如button[data-v-f3f3eg9])。问题在于大量的元素和 attribute 组合的选择器 (比如
button[data-v-f3f3eg9]) 会比类和 attribute 组合的选择器 (比如.btn-close[data-v-f3f3eg9]) 慢,所以应该尽可能选用类选择器。
正例:
<template> <button class="btn btn-close">X</button> </template> <style scoped> .btn-close { background-color: red; } </style>
反例:
<template> <button>X</button> </template> <style scoped> button { background-color: red; } </style>