Vuex で mutation から getter を呼ぶということをやっていいのか


#1

Vuex を使った設計をやるとして、state が1個しか無い、そしてそれに専用の更新メソッドがあるということだと思います。

この逆の副作用として、データを分散して持たせないのだから、state の中から対象のデータを特定するという動作が必要になってくると思っています。

store において、対象のデータを抽出するのは getters だと考えます。
なので、state のある特定のデータを更新したい場合には getters で対象を特定する必要が出てくると思います。

しかしながら、mutation からは getters を呼び出すことはできません。action を経由して、getters を payload に乗っけるという形で持っていくことはできますが、それは裏技的なことで、そういうことをやらないほうがいいから呼び出せない仕様になっていると思っています。

ということなんですが、mutation から getters を呼ばないのならば、このような場合もっと良い設計はあったりするのでしょうか?

mutation にデータの特定まで全部書くというのはありですが、getters で実装済みなのに、mutation に書かないといけない、それも必要な部分は毎回書かないといけないというのがどうも腑に落ちません。

うまいやり方があるなら教えていただきたいです。


#2

データのリストをidをkeyとしたオブジェクトで作成
mutationを呼び出すときにidを必ず渡すようにする、
idはgetterで取ってmutationに渡すとすれば、
二度手間感が無いんじゃないかと思います。


#3

それは action で getter を呼び出して、その結果を payload で mutation で渡し、mutation が payload もらった情報を元に更新するということになるということですかね?

確かにそれはそうなんですが、やはりそれは mutation から getter を呼べないから action を経由するということと同じような気がするんですが。


#4
state: {
    items: {
      id_aaa: { name: 'A' },
      id_bbb: { name: 'B' },
    }
  },
  mutations: {
    update (state,{id,name}) {
      if (!state.items.defineProperty(id)){

      }
    }
  }
}

常にactionを経由する必要はなく、特定のデータを更新したいというときは、画面表示のためにローカルのコンポーネントですでにIDを取得できている状態であるはずなのでmutationをそのまま呼べると思います。