如何写出更加规范的Vue代码

如何写出更加规范的Vue代码

Vue代码风格指南整理

Vue代码风格

A级:必要的

使用以下代码规则会规避一些不必要的错误

1、组件名为多个单词
  • 好处
    避免和现有的以及未来的HTML产生冲突,因为html元素名称为单元素

  • 举例

// 反例1,以todo为组件名
Vue.component("todo" , {
    ...
})
// 反例2,以todo为组件名
export default{
    name:"Todo"
}
// 好例子1,以'-'连接
Vue.component("todo-item" , {
    ...
})
// 好例子2,单词首字母大写
export default{
    name:"TodoItem"
}
2、组件的data必须是一个函数
  • 目的
    实现每个组件实例都能够管理自己的数据,以便于组件的重用。

  • 举例

// 反例1:以对象作为组件的data
Vue.component('some-comp', {
  data: {
    foo: 'bar'
  }
})
// 反例2:以对象作为组件的data
export default {
  data: {
    foo: 'bar'
  }
}
// 好例子:以函数作为组件的data
Vue.component('some-comp', {
  data: function () {
    return {
      foo: 'bar'
    }
  }
})
export default{
    data() {
        return {
          foo: 'bar'
        }
      }
}
3、prop的定义应该尽可能的详细
  • 好处
    ① 写明了组件的API,增加组件的易用性
    ② 在开发环境下,如果向一个组件提供格式不正确的 prop,Vue 将会告警,以帮助你捕获潜在的错误来源。

  • 举例

// 反例一:只写了属性名的代码
props: ['status']
// 好例子:在定义prop中,至少应该指出该prop值得类型
props: {
  status: String
}
// 进阶,更详细的说明
props: {
  status: {
    type: String,
    required: true,
    validator: function (value) {
      return [
        'syncing',
        'synced',
        'version-conflict',
        'error'
      ].indexOf(value) !== -1
    }
  }
}
4、总是使用key配合v-for

更高效的复用dom节点

  • 作用
    ① 对比组件自身新旧Dom进行更新,跟踪节点身份
    ② 辅助判断新旧dom节点在逻辑上是否是同一对象
    https://www.jianshu.com/p/a634eb3c19c2

  • 注意
    尽量始终添加 唯一 的键值

  • 示例

// 反例:直接使用循环
<ul>
      <li v-for="todo in todos">
        {{ todo.text }}
      </li>
</ul>
// 使用唯一的键值
<ul>
      <li
        v-for="todo in todos"
        :key="todo.id"
      >
        {{ todo.text }}
      </li>
</ul>
5、避免 v-if 和 v-for 用在一起
  • 目的
    v-forv-if具有更高的优先级,会先执行一遍v-for

  • 我们一般会在什么情况下采用写在一起的方式

    • 为了过滤一个列表中的项目
    • 为了避免渲染本应该被隐藏的列表
  • 代码实例

// 反例 - 直接将v-for 和 v-if直接使用在一起
<ul>
  <li
    v-for="user in users"
    v-if="shouldShowUsers"
    :key="user.id"
  >
    {{ user.name }}
  </li>
</ul>
// 好例子
<ul v-if="shouldShowUsers">
  <li
    v-for="user in users"
    :key="user.id"
  >
    {{ user.name }}
  </li>
</ul>
6、为组件样式设置作用域
  • 好处
    确保样式只会运用在它们想要作用的作用域上

B级:超级推荐

能够极大的改善工程的可读性及开发体验,主要分为命名规范和代码格式规范两个部分

1、单文件组件文件的大小写
  • 重点
    一个工程中的单文件组件的文件名应始终保持一致

  • 可选方式

  • 单词大写字符开头(MyGroup)

  • 横线连接的方式(my-group)

2、基础组件的命名方式
  • 什么是基础组件
    主要用于展示类的、无状态的、无逻辑的组件

  • 命名方式
    采用特定的前缀开头,例如 AppBaseV

  • 在项目中哪些属于基础组件
    类似按钮、表格、卡片、表单、输入框等等

3、单例组件的命名方式
  • 什么是单例组件
    在页面中只使用一次,且不接受任何prop,为当前项目工程定制的组件。例如项目中的menu

  • 命名方式
    采用特定的The前缀开头

4、紧密耦合的组件命名方式
  • 紧密耦合的方式
    如果一个组件只在某个父组件的场景下有意义,这层关系应该体现在其名字上。

  • 命名方式
    采用父级组件相关的单词作为前缀

5、组件名中的单词顺序
  • 命名方式
    一般以高级别的单词作为开头,描述性的单词作为结尾

  • 举例

// 好例子:名词在前,形容词动词在后
components/
|- SearchButtonClear.vue
|- SearchButtonRun.vue
|- SearchInputQuery.vue
|- SearchInputExcludeGlob.vue
|- SettingsCheckboxTerms.vue
|- SettingsCheckboxLaunchOnStartup.vue
7、组件命名使用单词全拼

一般组件的命名更倾向于使用完整的单词而并不是缩写,以便于代码的维护。

8、prop的命名方式
  • 官方命名方式
    在声明prop时,使用camelCase的方式
    在模板中使用时,使用camel-case的方式
9、标签含有多个特性的书写方式

当一个元素含有多个属性时,应该分行写,每个属性单独一行


D级:应避免的

1、避免在使用v-if/v-else中不使用key值

如果在一组 v-if/v-else 中,两者的元素相同,为了避免将不同的元素识别为相同的元素而发生意外的情况,最好添加不同的key值使用

2、避免在scoped样式中,使用元素选择器

scoped中,使用元素样式 + 自定义选择器样式,会降低界面的性能问题

3、尽量减少使用隐形的父子组件通信

官方推荐,尽量使用prop和父子组件之间的通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值