優先度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
コンポーネント/インスタンスのオプションに空白行がある
特に、スクロールしないと画面に収まらないようなオプションの場合、複数行のプロパティの間に1行空行を追加するとよいでしょう。
コンポーネントが窮屈に感じられたり、読みにくくなったりした場合、複数行のプロパティの間にスペースを追加することで、再び読み飛ばしやすくすることができます。Vim などのエディターでは、このような書式設定オプションにより、キーボードでの操作を容易にすることもできます。
良い例
js
props: {
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
},
computed: {
formattedValue() {
// ...
},
inputClasses() {
// ...
}
}
js
// コンポーネントが読みやすく操作しやすければ、
// スペースなしでも構いません。
props: {
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
},
computed: {
formattedValue() {
// ...
},
inputClasses() {
// ...
}
}
単一ファイルコンポーネントのトップレベル要素の順序
単一ファイルコンポーネントでは、 <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>