Open zxdfe opened 2 years ago
当 v-for 和 v-if 出现在同一级时
vue 2.x
v-for 的优先级更高,如果同时出现在同级每次渲染都会先执行循环再判断条件,由此可见对性能损耗比较大,可使用计算属性或者数组的filter方法先筛选需要的数据, 或者可以将 v-if 置于外层元素上。
filter
v-if
<ul v-if="todos.length"> <li v-for="todo in todos"> {{ todo }} </li> </ul>
vue 3.x
v-if 的优先级更高,因为 v-if 优先级高了,这意味着 v-if 将没有权限访问 v-for 里的变量,抛出错误
<!-- 1. 这会抛出一个错误,因为v-if先执行,属性 todo 此时还没有定义(v-for执行时才被定义) --> <li v-for="todo in todos" v-if="!todo.isComplete"> {{ todo.name }} </li> <!-- 2. 解决方法:可以在外层使用 v-for , 这也更加明显易读 --> <template v-for="todo in todos"> <li v-if="!todo.isComplete"> {{ todo.name }} </li> </template>
强烈建议不要在同一级上使用 v-for 和 v-if
当 v-for 和 v-if 出现在同一级时
在
vue 2.x
语法中v-for 的优先级更高,如果同时出现在同级每次渲染都会先执行循环再判断条件,由此可见对性能损耗比较大,可使用计算属性或者数组的
filter
方法先筛选需要的数据, 或者可以将v-if
置于外层元素上。在
vue 3.x
语法中v-if 的优先级更高,因为 v-if 优先级高了,这意味着 v-if 将没有权限访问 v-for 里的变量,抛出错误
强烈建议不要在同一级上使用 v-for 和 v-if