Vue 风格指南快速入门

Vue 官方在最近发布了代码风格指南的BETA版本,旨在引导开发者以正确的方式来书写代码,避免因为不规范而导致的问题。这对于新手开发者来说,只要遵循风格指南的内容,就可以避免很多坑。同时,Vue 官方将所有的规则归为了四个大类:

  1. A:必须准守的
  2. B:强烈推荐
  3. C:一般推荐
  4. D:谨慎使用

本文只是节选每个建议的大概内容与用法,给已经熟悉 Vue 的开发者一点提示,具体的细节还是建议学习官方的文档:Style Guide

A:必须准守的

  • 组件名应该始终为多个单词组成的,这样可以避免和 HTML 元素冲突(根组件 App 除外)。

  • 组件的 data 属性必须是一个函数,而它的值必须是返回一个对象。

export default {
  data () {
    return {
      foo: 'bar'
    }
  }
}
  • Prop 定义应该尽量详细

  • 总是为 v-for 设置键值 key

  • 顶级 App 组件和布局组件中的样式可以是全局的,单文件组件应该设置 scoped

  • 在插件、混入等扩展中始终为自定义的私有属性使用 $_ 前缀。并附带一个命名空间以回避和其它作者的冲突 (比如 $yourPluginName)。

B:强烈推荐

  • 当构建系统能够使用不同的文件连接使用,最好将组件独立成单独的文件,这样能够在需要的时候快速的找到

  • 单文件组件的文件名应该要么始终是单词大写开头 (PascalCase),要么始终是横线连接 (kebab-case)。

  • 应用特定样式和约定的基础组件 (也就是展示类的、无逻辑的或无状态的组件) 应该全部以一个特定的前缀开头,比如 Base、App 或 V。

  • 只应该拥有单个活跃实例的组件应该以 The 前缀命名,以示其唯一性。比如头部文件和左侧栏

components/
|- TheHeading.vue
|- TheSidebar.vue
  • 和父组件紧密耦合的子组件应该以父组件名作为前缀命名。

  • 组件名应该以高级别的 (通常是一般化描述的) 单词开头,以描述性的修饰词结尾。

  • 在单文件组件、字符串模板和 JSX 中没有内容的组件应该是自闭合的——但在 DOM 模板里永远不要这样做。

  • 在单文件组件和字符串模板中组件名应该总是 PascalCase 的。但是在 DOM 模板中总是 kebab-case 的。

  • JS/JSX 中的组件名应该始终是 PascalCase 的,尽管在较为简单的应用中只使用Vue.component
    进行全局组件注册时,可以使用 kebab-case 字符串。

  • 组件名应该尽量使用完整单词而不是缩写。

  • 在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板和 JSX 中应该始终使用 kebab-case。

  • 多个特性的元素应该分多行撰写,每个特性一行。

<img
  src="https://vuejs.org/images/logo.png"
  alt="Vue Logo"
>
  • 组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法。

  • 应该把复杂计算属性分割为尽可能多的更简单的属性。

  • 非空 HTML 特性值应该始终带引号

  • 指令缩写 (用 : 表示 v-bind: 和用 @ 表示 v-on:) 应该要么都用要么都不用。

C:一般推荐

组件/实例的选项的顺序

这是官方推荐的组件选项默认顺序。我将它们制作成图表的形式,从而更加直观。

Vue组件方法建议顺序

元素特性的顺序

Vue元素属性建议顺序
  • 在组件/实例选项中加入空行,使得阅读更加的容易

  • 单文件组件应该总是让 template、script和 style标签的顺序保持一致。且<style>要放在最后,因为另外两个标签至少要有一个。

D:谨慎使用

  • 没有在 v-if / v-if-else / v-else 中使用 key

  • 在 组件中的 scoped 中使用元素选择器

  • 父子组件通信

  • 全局状态管理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,044评论 0 29
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 10,982评论 4 129
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,198评论 0 6
  • 没有未来的未来不是我想要的未来!
    小太阳gxd阅读 164评论 0 0
  • 天意难料,上午阳光还是美艳艳的,可转眼整个下午都在下在大雨。银丝直挂,看不到起始,看不到终际,茫茫的街道巷弄全都迷...
    无花果云阅读 219评论 0 0