::: warning Note この Vue.js スタイルガイドは古くなっていますので、見直しが必要です。ご質問やご意見がありましたら、issue をオープンしてください。 :::
同じくらい良いオプションが複数ある場合、一貫性を確保するために任意の選択をできます。これらのルールでは、それぞれ許容可能なオプションを説明し、既定の選択を提案します。つまり、一貫性があり、良い理由を持ち続ける限り、独自のコードベースで自由に異なる選択肢を作ることができます。ですが、良い理由はあるのでしょうか!コミュニティーの標準に合わせることで、あなたは:
- 直面するコミュニティーのコードを容易に理解できるように脳を慣れさせます。
- ほとんどのコミュニティーのコードサンプルを変更なしにコピーして貼り付ける事ができます。
- 少なくとも Vue に関しては、ほとんどの場合、新たな人材はあなたのコーディングスタイルよりも既に慣れ親しんだものを好みます。
コンポーネント/インスタンスのオプションは、一貫した順序で並べる必要があります
これは、コンポーネントのオプションに推奨されるデフォルトの順序です。カテゴリーに分かれているので、プラグインから新しいプロパティを追加する場所がわかるでしょう。
-
グローバルな意識(コンポーネントを超えた知識を必要とする)
name
-
テンプレートコンパイラのオプション(テンプレートのコンパイル方法を変更する)
compilerOptions
-
テンプレートの依存関係(テンプレートで使用されているアセット)
componentsdirectives
-
構成(プロパティをオプションにマージする)
extendsmixinsprovide/inject
-
インターフェース(コンポーネントへのインタフェース)
inheritAttrspropsemits
-
Composition API(Composition API を使用するためのエントリーポイント)
setup
-
ローカルステート(ローカルのリアクティブなプロパティ)
datacomputed
-
イベント(リアクティブイベントにトリガーされるコールバック)
watch- ライフサイクルイベント(呼び出される順番)
beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedactivateddeactivatedbeforeUnmountunmountederrorCapturedrenderTrackedrenderTriggered
-
リアクティブでないプロパティ(リアクティビティーシステムに依存しないインスタンスプロパティ)
methods
-
レンダリング(コンポーネント出力の宣言的記述)
template/render
要素(構成要素を含む)の属性は、一貫した順序で並べる必要があります。
これは、コンポーネント・オプションに推奨されるデフォルトの順序です。カテゴリーに分かれているので、カスタム属性やディレクティブをどこに追加すればいいのかがわかります。
-
定義(コンポーネント・オプションを提供する)
is
-
リストレンダリング(同じ要素を複数のバリエーションで作成する)
v-for
-
条件分岐(要素がレンダリング/表示されているかどうか)
v-ifv-else-ifv-elsev-showv-cloak
-
レンダリングモディファイア(要素のレンダリング方法を変更する)
v-prev-once
-
グローバルアウェアネス(コンポーネントを超えた知識を必要とします)
id
-
ユニークな属性(一意な値を必要とする属性)
refkey
-
双方向バインディング(バインディングとイベントの組み合わせ)
v-model
-
その他の属性(すべての不特定のバインドされた/バインドされない属性)
-
イベント(コンポーネントイベントリスナー)
v-on
-
コンテンツ(要素の内容を上書きする)
v-htmlv-text
特に、スクロールしないと画面に収まらないようなオプションの場合、複数行のプロパティの間に 1 行空行を追加するとよいでしょう。
コンポーネントが窮屈に感じられたり、読みにくくなったりした場合、複数行のプロパティの間にスペースを追加することで、再び読み飛ばしやすくできます。Vim などのエディターでは、このような書式設定オプションにより、キーボードでの操作を容易にすることもできます。
props: {
value: {
type: String,
required: true
},
focused: {
type: Boolean,
default: false
},
label: String,
icon: String
},
computed: {
formattedValue() {
// ...
},
inputClasses() {
// ...
}
}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> は最後にする必要があります。なぜなら他の二つのうち少なくとも一つは常に必要だからです。
<style>/* ... */</style>
<script>/* ... */</script>
<template>...</template>
<!-- ComponentA.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
<!-- ComponentA.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<script>/* ... */</script>
<template>...</template>
<style>/* ... */</style>
<!-- ComponentA.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>
<!-- ComponentB.vue -->
<template>...</template>
<script>/* ... */</script>
<style>/* ... */</style>