Vue.js + Vuex + でStoreとは?

まずVueXとは? Vue.jsの問題点を解決するための仕組み

この記事は、下記公式サイトを参照しています。 また画像も下記サイトから転用しています。

https://vuex.vuejs.org/ja/

Vue.jsの問題点

  • アプリが大きくなると、コンポネントの間の親子関係を通して値のやり取りがきつくなる。
  • それぞれのコンポネントが、値を書き換えると、そこでのエラーが発生する。
  • アプリ全体の状態を保持することができないことはないけど、難しい。どこからでもstateの状態を変更できるので、他のcomponentが、stateの状態を変更中でもできてしまう。バグを発生しやすくなる。

f:id:happy_teeth_ago:20211216100811p:plain

VueXの解決方法

  • アプリ全体のstateを1つの場所で管理する。それが store.
  • store は Vueのインスタンスと似ている(下記参照)
    • componentは、data, methods, computedをもつ
    • dataは値、 methodsはdataの値を変更する関数、 computedからdataの値にアクセスする。

いつどこで、どのコンポネントがstateを変更するか予期するために、VueXは4つのパターンを用意した。

  • storeはstate , mutations, actions, gettersをもつ
    • stateは値、 actionsは、stateの値を変更する(methodsに当たる), gettersは、stateの値にアクセスする
    • 値の変更履歴を見るためにactionsは mutationsを通して stateの値を変更する。 ここがgitのような役割をして、stateの変更履歴保持している
    • mutationは同期のデータしか扱えない、 非同期のデータを扱うにはactionsを利用 する。保険として、全てactionsを利用したほうが良い。

f:id:happy_teeth_ago:20211216100756p:plain

処理の流れ

  • actionsのなかでcommit している。これがmutationを呼び出す。

このcommitが大切で、その前にaxiosでAPI等に問い合わせをして、待ちの状態が発生していることに注目

  • 呼び出されたmutationはstateの値を変更する

f:id:happy_teeth_ago:20211216100743p:plain

最後にloadingが完了したら storeのstateの値をgettersでcomponentに移動する

f:id:happy_teeth_ago:20211216100727p:plain

storeの値はgettersで取り出せる

f:id:happy_teeth_ago:20211216104119p:plain

必要な仕組みですね。考えた人賢い!