mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
[Doc] add style guide (#1245)
This commit is contained in:
parent
c520694ee1
commit
9379c6ce04
222
.github/STYLE_GUIDE.zh-CN.md
vendored
Normal file
222
.github/STYLE_GUIDE.zh-CN.md
vendored
Normal file
@ -0,0 +1,222 @@
|
||||
# 组件风格指南
|
||||
|
||||
## 组件数据
|
||||
|
||||
组件的 data 必须是一个函数。
|
||||
|
||||
```js
|
||||
// bad
|
||||
export default {
|
||||
data: {
|
||||
foo: 'bar'
|
||||
}
|
||||
}
|
||||
|
||||
// good
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
foo: 'bar'
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 单文件组件文件名称
|
||||
|
||||
单文件组件的文件名应该要么始终是单词大写开头 (PascalCase),要么始终是横线连接 (kebab-case)。
|
||||
|
||||
```
|
||||
// bad
|
||||
mycomponent.vue
|
||||
myComponent.vue
|
||||
|
||||
// good
|
||||
my-component.vue
|
||||
MyComponent.vue
|
||||
```
|
||||
|
||||
## 紧密耦合的组件名
|
||||
|
||||
和父组件紧密耦合的子组件应该以父组件名作为前缀命名。
|
||||
|
||||
```
|
||||
// bad
|
||||
components/
|
||||
|- TodoList.vue
|
||||
|- TodoItem.vue
|
||||
|- TodoButton.vue
|
||||
|
||||
// good
|
||||
components/
|
||||
|- TodoList.vue
|
||||
|- TodoListItem.vue
|
||||
|- TodoListItemButton.vue
|
||||
```
|
||||
|
||||
## 自闭合组件
|
||||
|
||||
在单文件组件中没有内容的组件应该是自闭合的。
|
||||
|
||||
```html
|
||||
<!-- bad -->
|
||||
<my-component></my-component>
|
||||
|
||||
<!-- good -->
|
||||
<my-component />
|
||||
```
|
||||
|
||||
## Prop 名大小写
|
||||
|
||||
在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板中应该始终使用 kebab-case。
|
||||
|
||||
```js
|
||||
// bad
|
||||
export default {
|
||||
props: {
|
||||
'greeting-text': String
|
||||
}
|
||||
};
|
||||
|
||||
// good
|
||||
export default {
|
||||
props: {
|
||||
greetingText: String
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```html
|
||||
<!-- bad -->
|
||||
<welcome-message greetingText="hi" />
|
||||
|
||||
<!-- good -->
|
||||
<welcome-message greeting-text="hi" />
|
||||
```
|
||||
|
||||
## Props 换行
|
||||
|
||||
多个 Props 的元素应该分多行撰写,每个 Props 一行,闭合标签单起一行。
|
||||
|
||||
```html
|
||||
<!-- bad -->
|
||||
<my-component foo="a" bar="b" baz="c" />
|
||||
|
||||
<!-- good -->
|
||||
<my-component
|
||||
foo="a"
|
||||
bar="b"
|
||||
baz="c"
|
||||
/>
|
||||
```
|
||||
|
||||
## 指令缩写
|
||||
|
||||
指令缩写,用 `:` 表示 `v-bind:` ,用 `@` 表示 `v-on:`
|
||||
|
||||
```html
|
||||
<!-- bad -->
|
||||
<input
|
||||
v-bind:value="value"
|
||||
v-on:input="onInput"
|
||||
>
|
||||
|
||||
<!-- good -->
|
||||
<input
|
||||
:value="value"
|
||||
@input="onInput"
|
||||
>
|
||||
```
|
||||
|
||||
## Props 顺序
|
||||
|
||||
标签的 Props 应该有统一的顺序,依次为指令、属性和事件。
|
||||
|
||||
```html
|
||||
<my-component
|
||||
v-if="if"
|
||||
v-show="show"
|
||||
v-model="value"
|
||||
ref="ref"
|
||||
:key="key"
|
||||
:text="text"
|
||||
@input="onInput"
|
||||
@change="onChange"
|
||||
/>
|
||||
```
|
||||
|
||||
## 组件选项的顺序
|
||||
|
||||
组件选项应该有统一的顺序。
|
||||
|
||||
```js
|
||||
export default {
|
||||
name: '',
|
||||
|
||||
mixins: [],
|
||||
|
||||
components: {},
|
||||
|
||||
props: {},
|
||||
|
||||
data() {},
|
||||
|
||||
computed: {},
|
||||
|
||||
watch: {},
|
||||
|
||||
created() {},
|
||||
|
||||
mounted() {},
|
||||
|
||||
destroyed() {},
|
||||
|
||||
methods: {}
|
||||
};
|
||||
```
|
||||
|
||||
## 组件选项中的空行
|
||||
|
||||
组件选项较多时,建议在属性之间添加空行。
|
||||
|
||||
```js
|
||||
export default {
|
||||
computed: {
|
||||
formattedValue() {
|
||||
// ...
|
||||
},
|
||||
|
||||
styles() {
|
||||
// ...
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
onInput() {
|
||||
// ...
|
||||
},
|
||||
|
||||
onChange() {
|
||||
// ...
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## 单文件组件顶级标签的顺序
|
||||
|
||||
单文件组件应该总是让顶级标签的顺序保持一致,且标签之间留有空行。
|
||||
|
||||
```html
|
||||
<template>
|
||||
...
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/* ... */
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* ... */
|
||||
</style>
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user