避免 v-if 和 v-for 用在一起

永远不要把 v-if 和 v-for 同时用在同一个元素上。

一般我们在两种常见的情况下会倾向于这样做:

  • 为了过滤一个列表中的项目 (比如 v-for="user in users" v-if="user.isActive" )。在这种情形下,请将 users 替换为一个计算属性 (比如 activeUsers),让其返回过滤后的列表。
  • 比如 v-for="user in users" v-if="shouldShowUsers"。这种情形下,请v-if 移动至容器元素上 (比如 ul, ol)。
1
2
3
4
5
6
7
8
<ul>
<li
v-for="user in activeUsers"
:key="user.id"
>
{{ user.name }}
</li>
</ul>
1
2
3
4
5
6
7
computed: {
activeUsers: function () {
return this.users.filter(function (user) {
return user.isActive
})
}
}

我们将会获得如下好处:

  • 过滤后的列表只会在 users 数组发生相关变化时才被重新运算,过滤更高效。

  • 使用 v-for="user in activeUsers" 之后,我们在渲染的时候只遍历活跃用户,渲染更高效。

  • 解耦渲染层的逻辑,可维护性 (对逻辑的更改和扩展) 更强。

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×