Vue.jsコンポーネント間のデータ連携方法・やり方

Vue.jsコンポーネント間のデータ連携 プログラミング

Vue.jsで作成するアプリにおいて、コンポーネント間でデータのやり取りを行う場合は、プロプス、エミット、プロバイド、インジェクトの機能を使用します。

これらの機能を活用することで、Vue.jsのコンポーネント間でスムーズなデータ伝達を行うことができます。

データの連携方法について、解説します。

コンポーネント全体像

プロプスについて

プロプスは、Vue.jsにおけるコンポーネント間のデータ伝達のための仕組みです。

親コンポーネントから子コンポーネントにデータを渡すために使用されます。

以下に、プロプスの基本的な使い方を説明します。

<!-- 子コンポーネント -->
<template> 
  <div>
    <p>{{ message }}</p>
  </div>
</template>

 <!-- 親コンポーネント -->
<template>
  <div>
    <child-component message="Hello from parent!"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default{
  components: {
    ChildComponent,
  },
}
</script>

上記の例では、message=”Hello from parent!”を親コンポーネントから子コンポーネントにデータを渡しています。

エミットについて

エミットは、Vue.jsのコンポーネント間でカスタムイベントを発生させるために使用されます。

子コンポーネントから親コンポーネントにデータを渡すためにも使用されます。

子コンポーネントから親コンポーネントにデータを渡す場合、まず子コンポーネントで$emit()メソッドを使用してイベントを発生させます。

その後、親コンポーネントで子コンポーネントから渡されたデータを受け取るために、v-onディレクティブを使用して子コンポーネントで発生させたイベントをリッスンします。

以下は、子コンポーネントから親コンポーネントにデータを渡す例です。

<!-- 子コンポーネント -->
<template>
  <button @click="increaseCount">Increase Count</button>
</template>

<script>
export default {
  data() {
    return {
      count: 0,
    };
  },
  methods: {
    increaseCount() {
      this.count++;
      this.$emit('count-increased', this.count);
    },
  },
};
</script>

<!-- 親コンポーネント -->
<template>
  <div>
    <p>Count: {{ count }}</p>
    <child-component @count-increased="updateCount"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent,
  },
  data() {
    return {
      count: 0,
    };
  },
  methods: {
    updateCount(count) {
      this.count = count;
    },
  },
};
</script>

上記の例では、子コンポーネントで$emit()メソッドを使用して、‘count-increased’というイベントを発生させ、子コンポーネントのcountデータを渡しています。

親コンポーネントでは、v-onディレクティブを使用して、‘count-increased’というイベントをリッスンし、子コンポーネントから渡されたcountデータをupdateCount()メソッドで受け取っています。

プロバイドとインジェクトについて

プロバイドとは、親コンポーネントから子・孫コンポーネントに対して、データを提供するための方法です。

プロバイドを使用すると、子コンポーネントでprovideオプションを使用してデータを提供し、子孫コンポーネントでinjectオプションを使用してデータを受け取ることができます

まずは、親コンポーネントでprovideオプションを使用してデータを提供する例を見てみましょう。

<template>
  <div>
    <ChildComponent />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent,
  },
  provide() {
    return {
      message: 'Hello from parent component!',
    };
  },
};
</script>

上記の例では、親コンポーネントでChildComponentを呼び出し、provideオプションを使用して‘message’というデータを提供しています。

この提供されたデータは、ChildComponent内で使用することができます

<template>
  <div>
    <GrandchildComponent />
  </div>
</template>

<script>
import GrandchildComponent from './GrandchildComponent.vue';

export default {
  components: {
    GrandchildComponent,
  },
};
</script>

次に、子孫コンポーネントでinjectオプションを使用して、提供されたデータを受け取る例を見てみましょう。

<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  inject: ['message'],
};
</script>

上記の例では、ChildComponent内でinjectオプションを使用して、親コンポーネントから提供された’message’を受け取っています。これで、子コンポーネントから孫コンポーネントへとデータを渡すことができました。

タイトルとURLをコピーしました