Vue
风格指南
组件名为多个单词
组件名应该始终是多个单词的,根组件 App
以及 ``transition、
component` 之类的 Vue 内置组件除外。
这样做可以避免跟现有的以及未来的 HTML 元素相冲突,因为所有的 HTML 元素名称都是单个单词的。
所有得
Component
文件都是以大写开头(PascalCase)
但除了
index.vue
例子:
@/src/components/Charts/Line.vue
JS
文件
所有的.js
文件都遵循横线连接 (kebab-case)。
@/src/utils/open-window.js
Views
在views
文件下,代表路由的.vue
文件都使用横线连接 (kebab-case),代表路由的文件夹也是使用同样的规则。
例子:
@/src/views/svg-icons/index.vue
@/src/views/svg-icons/require-icons.js
使用横线连接 (kebab-case)来命名views
主要是出于以下几个考虑。
- 横线连接 (kebab-case) 也是官方推荐的命名规范之一 文档
views
下的.vue
文件代表的是一个路由,所以它需要和component
进行区分(component 都是大写开头)- 页面的
url
也都是横线连接的,比如https://www.xxx.admin/export-excel
,所以路由对应的view
应该要保持统一 - 没有大小写敏感问题
为 v-for
设置键值
总是用 key
配合 v-for
避免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
)。 -
<ul> <li v-for="user in activeUsers" :key="user.id" > {{ user.name }} </li> </ul>
-
<ul v-if="shouldShowUsers"> <li v-for="user in users" :key="user.id" > {{ user.name }} </li> </ul>
组件文件
只要有能够拼接文件的构建系统,就把每个组件单独分成文件
当你需要编辑一个组件或查阅一个组件的用法时,可以更快速的找到它。
单文件组件大小写
单文件组件的文件名应该要么始终是单词大写开头 (PascalCase),要么始终是横线连接 (kebab-case)。
单词大写开头对于代码编辑器的自动补全最为友好,因为这使得我们在 JS(X) 和模板中引用组件的方式尽可能的一致。然而,混用文件命名方式有的时候会导致大小写不敏感的文件系统的问题,这也是横线连接命名同样完全可取的原因。
Prop
名大小写
在声明 prop 的时候,其命名应该始终使用 camelCase(驼峰命名),而在模板和 JSX 中应该始终使用 kebab-case。
props: {
greetingText: String
}
<WelcomeMessage greeting-text="hi"/>
应该优先通过 prop 和事件进行父子组件之间的通信,而不是 this.$parent
或改变 prop。
一个理想的 Vue 应用是 prop 向下传递,事件向上传递的。遵循这一约定会让你的组件更易于理解。然而,在一些边界情况下 prop 的变更或 this.$parent
能够简化两个深度耦合的组件。
问题在于,这种做法在很多简单的场景下可能会更方便。但请当心,不要为了一时方便 (少写代码) 而牺牲数据流向的简洁性 (易于理解)。
没有在 v-if
/v-else-if
/v-else
中使用 key
如果一组 v-if
+ v-else
的元素类型相同,最好使用 key
(比如两个 `` 元素)。
scoped
中的元素选择器
元素选择器应该避免在 scoped
中出现。
在 scoped
样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。