Правила приоритета C: Рекомендуются
При наличии нескольких одинаково хороших вариантов можно сделать произвольный выбор, чтобы обеспечить консистентность. В этих правилах мы описываем каждый приемлемый вариант и предлагаем выбор по умолчанию. Это означает, что вы можете выбрать другой вариант в собственной кодовой базе, пока вы соблюдаете консистентность и у вас есть веская причина. Пусть у вас будет действительно веская причина! Приспосабливаясь к стандарту общества, вы сможете:
- Гораздо проще понимать большинство кода сообщества, который вы встретите
- Копировать и вставлять большинство примеров кода сообщества без дальнейшей модификации
- Чаще находить сотрудников, которые уже привыкли к предпочитаемому стилю кода, по крайней мере, в отношении Vue
Порядок опций в компоненте/экземпляре
Порядок опций в компоненте/экземпляре должен сохранять консистентность.
Это порядок по умолчанию, который рекомендуем для опций компонентов. Они разделены на категории, чтобы вы знали куда добавлять новые свойства из плагинов.
Глобальная осведомлённость (требует знаний вне компонента)
name
Настройки компилятора шаблонов (изменяется способ компиляции шаблонов)
compilerOptions
Зависимости шаблона (ресурсы, используемые в шаблоне)
components
directives
Композиция (объединение свойств в опциях)
extends
mixins
provide
/inject
Интерфейс (интерфейс компонента)
inheritAttrs
props
emits
Composition API (точка входа при использовании Composition API)
setup
Локальное состояние (локальные реактивные свойства)
data
computed
События (коллбэки вызываемые реактивными событиями)
watch
- События хуков жизненного цикла (в порядке их вызова)
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated
deactivated
beforeUnmount
unmounted
errorCaptured
renderTracked
renderTriggered
Нереактивные свойства (свойства экземпляра, не зависящие от реактивности)
methods
Отрисовка (декларативное описание вывода компонента)
template
/render
Порядок атрибутов элемента
Атрибуты элемента (включая компоненты) должны также сохранять консистентность.
Это порядок по умолчанию, который рекомендуем для опций компонентов. Они разделены на категории, чтобы вы знали куда добавлять пользовательские атрибуты и директивы.
Определение (предоставляет параметры компонента)
is
Отображение списка (создаёт несколько вариантов одного элемента)
v-for
Условия (отрисовывается/отображается ли элемент)
v-if
v-else-if
v-else
v-show
v-cloak
Модификаторы отрисовки (изменяют способ отрисовки элемента)
v-pre
v-once
Глобальная осведомлённость (требует знания вне компонента)
id
Уникальные атрибуты (атрибуты, требующие уникальные значения)
ref
key
Двусторонняя привязка (объединение привязки и событий)
v-model
Другие атрибуты (все неуказанные связанные или несвязанные атрибуты)
События (слушатели событий компонента)
v-on
Содержимое (перезаписывают содержимое элемента)
v-html
v-text
Пустые строки между опций компонента/экземпляра
Можно добавить одну пустую строку между многострочными свойствами, особенно если опции не помещаются на экране без прокрутки.
Когда компоненты начинают казаться тесными и трудночитаемыми, добавление пустых строк между многострочными свойствами может облегчить их чтение. В некоторых редакторах, таких как 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(() => {
// ...
})
Порядок секций в однофайловых компонентах
Однофайловые компоненты должны всегда последовательно содержать теги <script>
, <template>
, и <style>
, причём <style>
должен располагаться последним, поскольку как минимум один из двух других всегда необходим.
Плохо
template
<style>/* ... */</style>
<script>/* ... */</script>
<template>...</template>
template
<!-- ComponentA.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
Хорошо
template
<!-- ComponentA.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
template
<!-- ComponentA.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>