Vue3 コンポーネント
すべての Vue コンポーネントは独立した Vue インスタンスであり、独自のテンプレート、データ、メソッド、ライフサイクルフックを持ちます。これにより、コンポーネントは自己完結的に独自の機能とスタイルを定義・管理できます。
コンポーネント(Component)は Vue.js の最も強力な機能の 1 つです。
コンポーネントは HTML 要素を拡張し、再利用可能なコードをカプセル化でき、ユーザーインターフェースを独立した再利用可能な部分に分割するのに役立ちます。
すべての Vue コンポーネントは独立した Vue インスタンスであり、独自のテンプレート、データ、メソッド、ライフサイクルフックを持ちます。これにより、コンポーネントは自己完結的に独自の機能とスタイルを定義・管理できます。
Vue コンポーネントの特徴と利点
- 再利用性: コンポーネントはさまざまな場所で何度も使用でき、コードの再利用性と保守性を高めます。
- カプセル化: 各コンポーネントは独立したスコープを持ち、自身の状態とロジックをカプセル化して、グローバル汚染を防ぎます。
- 組み合わせ性: 複数の小さなコンポーネントを組み合わせて複雑なインターフェースを構築できます。
- リアクティブ: コンポーネントのデータはビューにリアクティブにバインドされ、データが更新されるとビューが自動的に更新されます。
- モジュール化: モジュール開発をサポートし、最新のフロントエンドツールチェーンを使用して構築・管理できます。
コンポーネントシステムにより、独立した再利用可能な小さなコンポーネントを使って大規模なアプリケーションを構築でき、ほぼすべての種類のアプリケーションのインターフェースをコンポーネントツリーとして抽象化できます。

すべての Vue アプリケーションは createApp 関数を使用して作成されます。createApp に渡すオプションはルートコンポーネントを構成するために使用されます。アプリケーションをマウントすると、そのコンポーネントがレンダリングの起点として使用されます。
アプリケーションは DOM 要素にマウントする必要があります。
次の例では、Vue アプリケーションをにマウントします。#app を渡す必要があります:
const RootComponent = { /* 选项 */ }
const app = Vue.createApp(RootComponent)
const vm = app.mount('#app')
グローバルコンポーネントを登録する構文は次のとおりです:
const app = Vue.createApp({...})
app.component('my-component-name', {
/* ... */
})
my-component-nameはコンポーネント名、/* ... */部分は構成オプションです。登録後、次の方法でコンポーネントを呼び出すことができます:
<my-component-name></my-component-name>
シンプルな Vue コンポーネントの例:
グローバルコンポーネントの例
シンプルなグローバルコンポーネント サンプル を登録して使用します:
試してみる »
次に、button-counter コンポーネントを登録します。クリックするたびにカウンターが 1 ずつ増加します:
例
const app = Vue.createApp({})
// button-counter という名前の新しいグローバルコンポーネントを定義
app.component('button-counter', {
data() {
return {
count: 0
}
},
template: `
<button @click="count++">
クリック:{{ count }}回!
</button>`
})
app.mount('#app')
</script>
試してみる »
注意:template 内の`はバッククォートであり、シングルクォートではありません'。
コンポーネントの再利用
コンポーネントは何度でも再利用できます:
例
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
試してみる »
グローバルコンポーネント
上記の例では、コンポーネントは component を使用してグローバルに登録されているだけです。
グローバル登録されたコンポーネントは、その後作成される app インスタンスのテンプレートで使用できます。ルートインスタンスのコンポーネントツリー内のすべての子コンポーネントのテンプレートでも使用できます。
グローバルコンポーネントの例
シンプルなグローバルコンポーネント サンプル を登録して使用します:
試してみる »
ローカルコンポーネント
グローバル登録は必ずしも理想的ではありません。たとえば、webpack のようなビルドシステムを使用している場合、すべてのコンポーネントをグローバル登録すると、もう使用していないコンポーネントでも最終的なビルド結果に含まれてしまいます。これにより、ユーザーがダウンロードする JavaScript が不必要に増加します。
このような場合、通常の JavaScript オブジェクトを使用してコンポーネントを定義できます:
const ComponentA = {
/* ... */
}
const ComponentB = {
/* ... */
}
const ComponentC = {
/* ... */
}次に、components オプションで使用したいコンポーネントを定義します:
const app = Vue.createApp({
components: {
'component-a': ComponentA,
'component-b': ComponentB
}
})components オブジェクトの各プロパティについて、プロパティ名はカスタム要素の名前(component-a、component-b)であり、プロパティ値はそのコンポーネントのオプションオブジェクト(ComponentA、ComponentB)です。
インスタンスオプションでローカルコンポーネントを登録することもできます。これにより、そのコンポーネントはこのインスタンス内でのみ使用できます:
ローカルコンポーネントの例
シンプルなローカルコンポーネント サンプルA を登録して使用します:
試してみる »
単一ファイルコンポーネント (.vue ファイル)
単一ファイルコンポーネントを使用すると、Vue コンポーネントをより適切に整理・管理できます。コンポーネントは通常、テンプレート、スクリプト、スタイルの 3 つの部分で構成されます。
例
<template>
<div>
<p>{{ message }}</p>
<button @click="increment">Increment</button>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello from MyComponent',
count: 0
};
},
methods: {
increment() {
this.count++;
}
}
};
</script>
<style scoped>
/* コンポーネント専用スタイル */
p {
color: blue;
}
</style>
Prop
prop は、子コンポーネントが親コンポーネントから渡されたデータを受け取るためのカスタム属性です。
親コンポーネントのデータは props を介して子コンポーネントに渡す必要があります。子コンポーネントは props オプションで明示的に "prop" を宣言する必要があります:
Prop の例
試してみる »
コンポーネントはデフォルトで任意の数の prop を持つことができ、任意の値を任意の prop に渡すことができます。
動的 Prop
v-bind を使用して HTML 属性を式にバインドするのと同様に、v-bind を使用して props の値を親コンポーネントのデータに動的にバインドできます。親コンポーネントのデータが変化すると、その変化は子コンポーネントにも伝達されます:
Prop の例
試してみる »
Prop の検証
コンポーネントは props に検証要件を指定できます。
prop の検証方法をカスタマイズするには、props の値に対して文字列配列ではなく、検証要件を含むオブジェクトを提供できます。例:
Vue.component('my-component', {
props: {
// 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
propA: Number,
// 多个可能的类型
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true
},
// 带有默认值的数字
propD: {
type: Number,
default: 100
},
// 带有默认值的对象
propE: {
type: Object,
// 对象或数组默认值必须从一个工厂函数获取
default: function () {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator: function (value) {
// 这个值必须匹配下列字符串中的一个
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
}
}
})
prop の検証が失敗した場合、(開発環境ビルド版の)Vue はコンソールに警告を表示します。
type には次のネイティブコンストラクターを指定できます:
StringNumberBooleanArrayObjectDateFunctionSymbol
type はカスタムコンストラクターにすることもでき、instanceof を使用して検出されます。
その他の拡張