私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Vue 3 では、Composition API が導入され、コンポーネント通信に新たな柔軟性と機能がもたらされます。
フロントエンド開発では、コンポーネントはユーザー インターフェイスを構築する独立したユニットとして考えることができます。特定の機能とスタイルをカプセル化し、再利用でき、他の部分から独立して開発およびテストできます。コンポーネントの主な機能は、コードの再利用性、保守性、拡張性を向上させることです。インターフェイスを複数のコンポーネントに分割することで、開発者は複雑なアプリケーションをより簡単に管理できるようになり、各コンポーネントを最適化して全体的な開発効率とアプリケーションのパフォーマンスを向上させることができます。
Vue.js のようなフロントエンド フレームワークでは、コンポーネントをネストしてコンポーネント ツリーを形成できます。このツリー構造では、各コンポーネントはサブコンポーネントを持つことができ、これらのサブコンポーネントは独自のサブコンポーネントを持つことができ、階層構造を形成します。この構造により、コンポーネント間の関係が明確になり、管理と保守が容易になります。
コンポーネント ツリーとコンポーネントの親子関係の概念は、コンポーネントの通信を理解するために重要です。これらの基本知識を習得すると、開発者がコンポーネント間の通信メカニズムをより効果的に設計および実装するのに役立ちます。
小道具とは
Props は、親コンポーネントが子コンポーネントにデータを渡すためのメカニズムです。Vue 3 では、次を使用します。defineProps
API は受信プロパティを宣言するために使用されます。これにより、データの一方向の流れが維持され、コンポーネントの独立性と再利用性が保証されます。
親コンポーネントでpropsを渡す方法
親コンポーネントのテンプレートで、次を使用します。v-bind
または略語:
データをバインドするには:
- <template>
- <ChildComponent :my-prop="parentData" />
- </template>
ここ、:my-prop
これが動的にバインドされたプロップであることを示します。parentData
親コンポーネントで定義されたデータですか。
子コンポーネントでpropsを受け取る方法
子コンポーネントで、次を使用します。defineProps
受け取った props を宣言するには:
- <script setup>
- import { defineProps } from 'vue';
-
- const props = defineProps({
- myProp: String
- });
- </script>
存在する<script setup>
糖衣構文では、defineProps
小道具をコンポーネントの応答プロパティとして自動的に公開します。
何を発するのか
Emit は、子コンポーネントが親コンポーネントにメッセージを送信するメカニズムです。Vue 3 では、次を使用します。defineEmits
発行できるイベントを宣言して使用するための APIemit
イベントをトリガーする関数。
子コンポーネントでイベントをトリガーする方法
子コンポーネントのメソッドで、次を使用します。 defineEmits
発行できるイベントを宣言し、使用します emit
トリガーするには:
- <script setup>
- import { defineEmits } from 'vue';
-
- const emit = defineEmits(['my-event']);
-
- function triggerEvent() {
- emit('my-event', dataToPass);
- }
- </script>
defineEmits
コンポーネントが発行できるイベントを宣言するために使用されます。emit
これらのイベントをトリガーするには関数が使用されます。
親コンポーネントで子コンポーネントのイベントをリッスンする方法
親コンポーネントのテンプレートでは、使用v-on
または略語@
子コンポーネントによって発行されたイベントをリッスンするには:
- <template>
- <ChildComponent @my-event="handleEvent" />
- //或者<ChildComponent v-on:my-event="handleEvent" />
- </template>
ここ、@my-event
リッスンしているサブコンポーネントが出力することを示します。my-event
イベント、handleEvent
これは親コンポーネントで定義されたメソッドであり、イベントがトリガーされるとこのメソッドが呼び出されます。
親コンポーネントがあると仮定しますParentComponent
そしてサブコンポーネントChildComponent
、親コンポーネントは子コンポーネントにデータを渡す必要があり、子コンポーネントは特定の操作の後に親コンポーネントに通知する必要があります。
親コンポーネントParentComponent.vue
- <template>
- <ChildComponent :my-prop="parentData" @child-event="handleChildEvent" />
- </template>
-
- <script setup>
- import { ref } from 'vue';
- import ChildComponent from './ChildComponent.vue';
-
- const parentData = ref('initial data');
- const handleChildEvent = (data) => {
- console.log('Received data from child:', data);
- };
- </script>
サブアセンブリChildComponent.vue
- <template>
- <button @click="sendDataToParent">Send Data to Parent</button>
- </template>
-
- <script setup>
- import { defineProps, defineEmits } from 'vue';
-
- const props = defineProps({
- myProp: String
- });
-
- const emit = defineEmits(['child-event']);
-
- function sendDataToParent() {
- emit('child-event', props.myProp);
- }
- </script>
この例では、親コンポーネントは次のように渡します。:my-prop
データを子コンポーネントに渡して渡す@child-event
子コンポーネントによって発行されたイベントをリッスンします。子コンポーネントのパスdefineProps
親コンポーネントによって渡されたコンテンツを受け取りますmyProp
、ボタンクリックイベントで使用しますemit
データを親コンポーネントに送信します。
Pinia は、Vue 3 で公式に推奨される状態管理ライブラリです。これは、アプリケーションの状態を管理するコンポーネントベースの方法を提供します。 Pinia の主な利点と機能の一部を以下に示します。
Pinia の使用を開始するには、まず Pinia をインストールする必要があります。
npm install pinia
または糸を使用します。
yarn add pinia
次に、Vue アプリケーションで Pinia をセットアップします。
- import { createPinia } from 'pinia';
-
- const pinia = createPinia();
- app.use(pinia);
ストアを作成します。
- import { defineStore } from 'pinia';
-
- export const useCounterStore = defineStore('counter', () => {
- const count = ref(0);
-
- function increment() {
- count.value++;
- }
-
- return { count, increment };
- });
コンポーネント内のストアを使用します。
- <script setup>
- import { useCounterStore } from '@/stores/counter';
-
- const counterStore = useCounterStore();
- </script>
-
- <template>
- <div>
- <p>Count: {{ counterStore.count }}</p>
- <button @click="counterStore.increment">Increment</button>
- </div>
- </template>
Pinia とコンポーネントの統合は、主に次の方法により非常に簡単です。defineStore
ストアを作成する機能。コンポーネントでは、ストア内の状態とメソッドを直接使用できます。
- <template>
- <div>
- <p>Count: {{ count }}</p>
- <button @click="increment">Increment</button>
- </div>
- </template>
-
- <script setup>
- import { useCounterStore } from '@/stores/counter';
-
-
- const counterStore = useCounterStore();
- const { count, increment } = storeToRefs(counterStore);
- //如果这里不使用storeToRefs会丢失响应式特性
- </script>
上記の例では、テンプレート内で直接アクセスします。count
カウンタ値を表示し、ボタンクリックイベントで呼び出します。increment
カウンタ値をインクリメントするメソッド。
Provide/Injectの基本的な使い方
Vue3では、provide
そしてinject
これは、コンポーネント階層の深さに関係なく、祖先コンポーネントがそのすべての子孫コンポーネントに依存関係を注入できるようにする、親コンポーネントと子コンポーネント間の通信方法です。
provide
関数はデータを提供します。inject
関数はデータを注入します。Provide/Inject に適用されるシナリオprovide
そしてinject
次のシナリオに適用されます。
props
データを渡すとき。サンプルコード:
- // 祖先组件
- export default {
- setup() {
- const message = 'Hello from Ancestor!';
- provide('message', message);
- }
- }
-
- // 子孙组件
- export default {
- setup() {
- const message = inject('message');
- return { message };
- }
- }
テレポートの概念と使用法Teleport
これは Vue 3 で追加された新しい組み込みコンポーネントであり、コンポーネント内のテンプレートの一部を DOM 内の他の場所に「送信」できます。
コンポーネント通信に Teleport を使用する方法Teleport
これはコンポーネント間の通信には使用されませんが、コンポーネントのレンダリング位置を制御するために使用されます。しかし、あなたは使うことができますTeleport
特別な通信方法は、コンポーネントの一部を親コンポーネントの DOM にレンダリングすることによって実現されます。
サンプルコード:
- <!-- 父组件 -->
- <template>
- <div>
- <Teleport to="body">
- <ChildComponent />
- </Teleport>
- </div>
- </template>
-
- <!-- 子组件 -->
- <template>
- <div>Some content</div>
- </template>
構成 API の概要
Vue 3 では、ロジックを整理して再利用する新しい方法を提供する、Composition API を導入しました。合格setup
関数を使用すると、開発者はコンポーネントの応答状態とライフサイクルをより柔軟に制御できます。
コンポーネント間通信には ref と reactive を使用するref
そしてreactive
これは、レスポンシブ データを作成するための、Composition API のツールです。
ref
基本的なデータ型を作成するためのリアクティブ参照。reactive
オブジェクトタイプを作成するためのリアクティブな参照。構成 API での Provide と Inject の使用
構成 API では、provide
そしてinject
許容できるsetup
コンポーネント間の通信を実現するために関数で使用されます。
サンプルコード:
- // 祖先组件
- import { provide } from 'vue';
-
- export default {
- setup() {
- const message = ref('Hello from Ancestor!');
- provide('message', message);
- }
- }
-
- // 子孙组件
- import { inject } from 'vue';
-
- export default {
- setup() {
- const message = inject('message');
- return { message };
- }
- }
これらの Vue 3 の独自の通信方法により、開発者はコンポーネント間の通信をより柔軟に整理し、コードの保守性と再利用性を向上させることができます。
Vue 3 では、Composition API が導入されており、コンポーネント通信に新しい柔軟性と強力な機能をもたらします。コンポーネント通信は、フロントエンド開発において複雑なユーザー インターフェイスを構築するための鍵です。これには、親コンポーネントと子コンポーネント、兄弟コンポーネント、祖先コンポーネントと子孫コンポーネント間のデータ転送とイベント トリガーが含まれます。 Vue 3 は、従来のプロップとエミットに加え、新しい Provide/Inject、Teleport、Composition API を含むさまざまな通信メソッドを提供します。
作成は簡単ではありません。この記事が役に立ったら、「いいね!」を押していただけますか?