[Vue] Storeの値を直接コンポーネントで取得できない場合のリアクティブな反映方法2

[Vue] Storeの値を直接コンポーネントで取得できない場合のリアクティブな反映方法(https://coneta.jp/article/show/2954) の続き

もしオブジェクト内のとあるプロパティのみ(もしくはそれ以下)を監視したい、という場合は以下

export default Vue.extend({
  async created() {
    this.unwatch = this.$store.watch(
      (state, getters) => getters["someModule/object"].prop.list[0],
      (newValue, oldValue) => {
        console.log(newValue);
      },
      { deep: true }
    );
  }
});

deep: trueを指定することでオブジェクトの中身まで監視できる。

上の例だと、object.prop.listの0番目が変更されたときのみ、イベントが発火する。

unwatchというdataに代入しているのは、返り値としてunsbscribeするための関数が戻ってくるため。

Componentの破棄時にでも監視を停止しよう。

beforeDestroy() {
  this.unwatch();
},