📘

Vue と Vuex の ウォッチャー / プロパティの変更を検知する | Vue3, Vuex4

2024/02/29に公開

Vue のウォッチャー / Vue Watchers

Vue において、data の状態を監視する方法.
ウォッチャーを使うと、対象の data が変更されるたびに関数を実行することができる.

Component.vue
export default {
  data() {
    return {
      question: '', // 監視対象のプロパティ "question"
    };
  },
  watch: {
    // ウォッチャーの定義
    question(newQuestion, oldQuestion) {// "question" が変更されるたびに実行される
    }
  },}

Vuex のウォッチャー / Vuex Watchers

書き方は若干違うが、Vue のウォッチャーと効果はほぼ同様である.

以下、例として次のような store を考える. (かなり省略されている)

main.js
const store = createStore({
  state: {
    prefecture: null // 監視対象
  },
  getters: {
    prefecture(state) { return state.prefecture }
  },
});

そして、その場合の Watch 登録例が以下である.

Component.vue
export default {mounted() {
    this.$store.watch(
      (state, getters) => getters.prefecture, 
      (newValue, oldValue) => {
        // "prefecture" が変更されるたびに実行される}
    )
  }
}

Vuex の他の方法

Vuex に関する情報は、こちらのサイトを参考にさせていただいた.
https://kawadev.net/vuex-watch/
これを簡単にまとめると、次のようになる.

Vuex で state 関連の変更を検知する方法は、3 つある.

方法 監視対象 特徴
watch state 直接 state を監視, 変更前後の値を取得できる
subscribe mutations mutation 実行後に実行
subscribeAction actions action 実行に伴い起動 (前後の選択が可能)

状態の監視は watch, イベントフックは subscribe または subscribeAction を使い分ける.
詳しい書き方等はソースを確認してください.

Discussion