Vue.jsで子コンポーネントから親データを更新する方法


  1. イベントを使用する方法: 子コンポーネントでデータが変更された場合、カスタムイベントを発火して、それを親コンポーネントでキャッチすることができます。具体的な手順は以下の通りです。

まず、子コンポーネント内で以下のようにイベントを発火します。

this.$emit('update-parent-data', newData);

次に、親コンポーネント内で、子コンポーネントが発火したイベントをキャッチして親データを更新します。

<template>
  <div>
    <child-component @update-parent-data="updateParentData"></child-component>
  </div>
</template>
<script>
export default {
  data() {
    return {
      parentData: ""
    };
  },
  methods: {
    updateParentData(newData) {
      this.parentData = newData;
    }
  }
};
</script>
  1. Vuexを使用する方法: VuexはVue.jsの公式の状態管理ライブラリであり、親子コンポーネント間でデータの共有と更新を容易にします。以下の手順で使用することができます。

まず、Vuexストアを作成し、親コンポーネントと子コンポーネントの両方で使用できるようにします。

// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    parentData: ''
  },
  mutations: {
    updateParentData(state, newData) {
      state.parentData = newData;
    }
  }
});

次に、子コンポーネントでデータを更新するために、Vuexストアのミューテーションをコミットします。

// ChildComponent.vue
methods: {
  updateParentData(newData) {
    this.$store.commit('updateParentData', newData);
  }
}

最後に、親コンポーネントでVuexストアの親データを参照することができます。

<template>
  <div>
    {{ $store.state.parentData }}
  </div>
</template>

これらの方法を使用すると、子コンポーネントから親コンポーネントへのデータの更新が可能になります。どちらの方法も効果的であり、プロジェクトの要件やコードの構造に応じて選択できます。