Vue 踩坑指南

1. v-if 和 v-for 避免同时使用

在使用下面模版时,v-forv-if 具有更高的优先级,v-for会先遍历再判断是否显示,因此哪怕我们只渲染出一小部分用户的元素,也得在每次重渲染的时候遍历整个列表,这会一定程度影响效率。

<ul>
  <li v-for="user in users" v-if="user.isActive" :key="user.id">
    {{ user.name }}
  </li>
</ul>

解决方法

  • 通过计算属性先筛选一遍 list

<ul>
  <li v-for="user in activeUsers" :key="user.id">
    {{ user.name }}
  </li>
</ul>

<script>
export default {
    computed: {
        activeUsers: function () {
            return this.users.filter(function (user) {
                return user.isActive
            })
        }
    }
}
</script>
  • v-if 移动至容器元素上 (比如 ul, ol)(个人推荐)

如果没有外层元素,我们可以添加<template v-if=''></template> 进行包裹。

2. SCSS 全局变量

以下是存放变量的 scss 文件:

即使在 main.js 中引入文件,但是在实际组件的应用中也需要进行引入否则无法使用全局变量:

那么全局 SASS/SCSS 变量在 Vue 项目中应用解决方案如下:

  • 使用 sass-resources-loader

  • 项目基于 Vue-cli 3.x 的话可以配置vue.config.js文件,详见参考资料

3. Vue 使用 computed 时不要使用箭头函数

在获取 vuex state 的过程中,在 computed 下,如果使用箭头函数则无法获取到数据!!!

router-link ****会阻止 click/mouseover 等事件,如果只用 @click/@mouseover 等不加 native则事件就不会触发。

5. Vue 中引入本地图片

用绝对路径引入时,路径读取的是public文件夹中的资源,任何放置在 public 文件夹的静态资源都会被简单的复制到编译后的目录中,而不经过 webpack特殊处理。

当路径的文件名需要拼接变量的时候,可使用 require() 引入,在 template 的:src 或者 script 的 data 中都可以进行 require 引入或拼接

如果你对内容有任何疑问,欢迎提交 ❕issues✉️ email

最后更新于

这有帮助吗?