Vue.jsの公式ドキュメントからやっちゃいけないことを、備忘録としてまとめました。あくまで備忘録レベルのまとめでかなり適当なので、これじゃダメな人は公式を見てください(日本語もあります)。
Appを除いて、componentの名前は複数単語でないとダメ。
Badな例
export default {
name: 'Todo',//Todo一単語じゃダメ
// ...
}
good
export default {
name: 'TodoItem',//必ず2語以上
// ...
}
componentのdataはfunctionにしないとダメ
good
data: function () {
return {
listTitle: '',
todos: []
}
}
propsの項目はできるだけ詳しく書かないとダメ
Badな例
props: ['status']//これでも動くけど・・・
good
props: {
status: String//ちゃんと型も書く
}
//ここまで厳密に書いたほうがいい
props: {
status: {
type: String,
required: true,
validator: function (value) {
return [
'syncing',
'synced',
'version-conflict',
'error'
].indexOf(value) !== -1
}
}
}
v-forには:key(v-bind:key)もつけないとダメ
<ul>
<li
v-for="todo in todos"
:key="todo.id"
>
{{ todo.text }}
</li>
</ul>
componentにつけるcss(style)はscopedするか、セレクタを厳密につけないとダメ
<style scoped>/*scopedでこのcomponentだけに適応*/
.button {
border: none;
border-radius: 2px;
}
.button-close {
background-color: red;
}
</style>
<style>
.c-Button {/*このcomponentのみに通用するセレクタを適応*/
border: none;
border-radius: 2px;
}
.c-Button--close {
background-color: red;
}
</style>
ここからは必須ではなく、推奨。
componentは一つ一つ別のファイルに保存するといい
Vue.component('TodoList', {
// ...
})
Vue.component('TodoItem', {
// ...
})
componentのfile名はPascalCaseかkebab-caseに統一するといい
PascalCaseは先頭の文字も含めてすべて単語の頭文字が大文字のキャメルケース。kebab-caseはアンダーバーではなくハイフンでつなげるスネークケース(わかりにくい)。
だいたいPascalCaseでOK。DOMテンプレートはkebab-case。
アプリケーション全体で使われるcomponentの名前はbaseやv、appなどのプリフィックスをつけておくといい
BaseButton.vueとか・・・VTable.vueとか・・・
各ページで一度しか使わないcomponentはプレフィックスにTheをつけたほうがいい
Sidebar.vue → TheSidebar.vue とか・・・
ある親要素でしか使われない子要素はプリフィックスとして名前の初めに親要素を入れておいたほうがいい
例えば、Sidebarに特別に使われるButtonがあったなら、SidebarButton.vueにする
single-file components、string templates、JSXのタグは自己終了形式<タグ/>で書いたほうがいい
DOMテンプレートの場合のみタグで囲む。
Propsに定義する名称は略さないほうがいい
SdSettings.vue → StudentDashboardSettings.vue
propsの中身はcamelCaseで、テンプレートのタグの中やJSXではkebab-case
good
props: {
greetingText: String
}
<WelcomeMessage greeting-text="hi"/>
だいぶややこしいことになってますね。
テンプレート内に複雑な式は書かずにmethodsかcomputedに書いたほうがいい
computedに書く式は短くシンプルに切り分ける
省略形は使うか使わないか統一する
: → v-bind:、 @ → v-on: 、 # → v-slot



