推荐规则
推荐规则 {#priority-c-rules-recommended}
当存在多个同样好的选项时,可以任意选择一个以确保一致性。在这些规则中,我们描述了每个可接受的选项,并建议一个默认选择。这意味着你可以在自己的代码库中自由做出不同的选择,只要保持一致并且有充分的理由。但请务必有充分的理由!通过适应社区标准,你将:
- 训练你的大脑,更容易解析你遇到的大多数社区代码
- 能够无需修改地复制和粘贴大多数社区代码示例
- 经常发现新员工已经习惯了你的首选编码风格,至少在 Vue 方面是如此
组件/实例选项的顺序 {#component-instance-options-order}
组件/实例选项应该保持一致顺序。
这是我们推荐的组件选项默认顺序。它们被分为几个类别,这样你就知道从哪里添加插件新增的属性。
-
全局感知(需要超出组件本身的知识)
name
-
模板编译器选项(改变模板的编译方式)
compilerOptions
-
模板依赖(模板中使用的资源)
componentsdirectives
-
组合(将属性合并到选项中)
extendsmixinsprovide/inject
-
接口(组件的接口)
inheritAttrspropsemitsexpose
-
组合式 API(使用组合式 API 的入口点)
setup
-
局部状态(局部响应式属性)
datacomputed
-
事件(由响应式事件触发的回调)
watch- 生命周期事件(按调用顺序排列)
beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedactivateddeactivatedbeforeUnmountunmountederrorCapturedrenderTrackedrenderTriggeredserverPrefetch(仅限 SSR)
-
非响应式属性(独立于响应式系统的实例属性)
methods
-
渲染(组件输出的声明式描述)
template/render
元素属性的顺序 {#element-attribute-order}
元素(包括组件)的属性应该保持一致顺序。
这是我们推荐的组件选项默认顺序。它们被分为几个类别,这样你就知道从哪里添加自定义属性和指令。
-
定义(提供组件选项)
is
-
列表渲染(创建同一元素的多个变体)
v-for
-
条件(元素是否被渲染/显示)
v-ifv-else-ifv-elsev-showv-cloak
-
渲染修饰符(改变元素的渲染方式)
v-prev-once
-
全局感知(需要超出组件本身的知识)
id
-
唯一属性(需要唯一值的属性)
refkey
-
双向绑定(结合绑定和事件)
v-model
-
其他属性(所有未指定的绑定和非绑定属性)
-
事件(组件事件监听器)
v-on
-
内容(覆盖元素的内容)
v-htmlv-text
组件/实例选项中的空行 {#empty-lines-in-component-instance-options}
你可能希望在多行属性之间添加一个空行,特别是当选项超出屏幕需要滚动时。
当组件开始变得拥挤或难以阅读时,在多行属性之间添加空格可以让它们更容易被浏览。在某些编辑器中,例如 Vim,这样的格式化选项也可以让它们更容易用键盘导航。
不推荐
js
defineProps({
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
})
const formattedValue = computed(() => {
// ...
})
const inputClasses = computed(() => {
// ...
})
推荐
js
defineProps({
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
})
const formattedValue = computed(() => {
// ...
})
const inputClasses = computed(() => {
// ...
})
单文件组件顶级元素顺序 {#single-file-component-top-level-element-order}
单文件组件 应该始终让 <script>、<template> 和 <style> 标签保持一致的顺序,并且 <style> 放在最后,因为其他两个中至少有一个是始终必需的。
不推荐
vue-html [ComponentX.vue]
<style>/* ... */</style>
<script>/* ... */</script>
<template>...</template>
vue-html [ComponentA.vue]
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
vue-html [ComponentB.vue]
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
推荐
vue-html [ComponentA.vue]
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
vue-html [ComponentB.vue]
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
或
vue-html [ComponentA.vue]
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
vue-html [ComponentB.vue]
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
