1、组件名为多个单词,根组件APP以及transition和component之类的Vue内置组件除外
2、组件的data必须是一个函数:
data: function () {
return {
listTitle: '',
todos: []
}
}
3、prop定义应该详细。
细致的 prop 定义有两个好处:
- 它们写明了组件的 API,所以很容易看懂组件的用法;
- 在开发环境下,如果向一个组件提供格式不正确的 prop,Vue 将会告警,以帮助你捕获潜在的错误来源
// 更好的做法!
props: {
status: {
type: String,
required: true,
validator: function (value) {
return [
'syncing',
'synced',
'version-conflict',
'error'
].indexOf(value) !== -1
}
}
}
4、为v-for设置键值
在组件上总是必须用 key
配合 v-for
,以便维护内部组件及其子树的状态。甚至在元素上维护可预测的行为。
案例:如你想使用 <transition-group>
给列表加过渡动画,或想在被渲染元素是 <input>
时保持聚焦。
5、避免v-if和v-for用在一起(v-for的优先级高于v-if)
特殊:
-
为了过滤一个列表中的项目 (比如
v-for="user in users" v-if="user.isActive"
)。在这种情形下,请将users
替换为一个计算属性 (比如activeUsers
),让其返回过滤后的列表。 -
为了避免渲染本应该被隐藏的列表 (比如
v-for="user in users" v-if="shouldShowUsers"
)。这种情形下,请将v-if
移动至容器元素上 (比如ul
,ol
)。
对于两者存在的话,可以将v-if提到容器的父元素。
6、为组件样式设置作用域
采用基于class的策略、scope特性
7、私有属性名
使用模块作用域保持不允许外部访问的函数的私有性。如果无法做到这一点,就始终为插件、混入等不考虑作为对外公共 API 的自定义私有属性使用 $_
前缀。并附带一个命名空间以回避和其它作者的冲突 (比如 $_yourPluginName_
)。
//第一
var myGreatMixin = {
methods: {
$_myGreatMixin_update: function(){
}
}
}
//第二
var myGreatMixin = {
methods: {
publicMethod(){
myPrivateFunction()
}
}
}
function myPrivateFunction(){
}
export default myGreatMixin
8、只要有能够拼接文件的构建系统,就把每个组件单独分成文件。
9、单文件组件的文件名应该要么始终是单词大写开头 (PascalCase),要么始终是横线连接 (kebab-case)。
10、只应该拥有单个活跃实例的组件应该以 The
前缀命名,以示其唯一性。
11、和父组件紧密耦合的子组件应该以父组件名作为前缀命名。
你可以试着通过在其父组件命名的目录中嵌套子组件以解决这个问题。
12、在单文件组件、字符串模板和 JSX 中没有内容的组件应该是自闭合的——但在 DOM 模板里永远不要这样做。
<!-- 在单文件组件、字符串模板和 JSX 中 -->
<MyComponent/>
<!-- 在 DOM 模板中 -->
<my-component></my-component>
13、对于绝大多数项目来说,在单文件组件和字符串模板中组件名应该总是 PascalCase 的——但是在 DOM 模板中总是 kebab-case 的。
14、JS/JSX 中的组件名应该始终是 PascalCase 的,尽管在较为简单的应用中只使用 Vue.component
进行全局组件注册时,可以使用 kebab-case 字符串。
15、组件名应该倾向于完整单词而不是缩写。
在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板和 JSX 中应该始终使用 kebab-case。
props: {
greetingText: String
}
<WelcomeMessage greeting-text="hi"/>
16、多个特性的元素应该分多行撰写,每个特性一行。
17、组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法。
18、应该把复杂计算属性分割为尽可能多的更简单的属性。
19、非空 HTML 特性值应该始终带引号 (单引号或双引号,选你 JS 里不用的那个)。
20、指令缩写 (用 :
表示 v-bind:
、用 @
表示 v-on:
和用 #
表示 v-slot:
) 应该要么都用要么都不用。
21、你可能想在多个属性之间增加一个空行,特别是在这些选项一屏放不下,需要滚动才能都看到的时候。
22、单文件组件应该总是让 <script>
、<template>
和 <style>
标签的顺序保持一致。且 <style>
要放在最后,因为另外两个标签至少要有一个。