【Nuxt.js】Vuex Storeの使い方

一度勉強したのですが、忘れてしまったので復習のついででnoteにまとめます。

Vuex Storeについて

Vuex StoreをNuxt.js導入環境で利用したいときは、

const store = new Vuex.Store( ~~~~~~~

のような記載は必要ない。

storeフォルダにjsファイルを置くだけで、Vuex Storeが自動で導入される。

ストアとは?

データの保存場所です。

複数ページで利用する値や、ステータスを管理する上で利用します。

ステータスを管理とは、ログイン状態などのことを指しています。

ストアを利用するには、以下の4つを用意します。

ステート state

ミューテーション mutations

アクション actions

ゲッター getter

ステート

データの保管場所そのものです。

変数に宣言してstateを保持します。

[サンプルコード]

export const state = ()=>({
   started: null,
   message: 'hello'
});

ミューテーション

ステートの値を唯一変更可能なのがミューテーションです。

要は、「セッター」です。

それぞれのページ(コンポーネント)からステートの値を変えるのはNGで、こちらのミューテーションを経由して値を変えることになります。

[サンプルコード(store -> index.js)]

export const mutations = {
   clear(state) {
       state.started = null
       state.message = null
   },
   started(state, started) {
       state.started = started;
   },
   updateMessage(state){
       state.message = 'こんにちは'
   }
};

[サンプルコード (pages -> index.vue)]

commitメソッドで呼び出す点を覚えておこう。

 <button v-on:click="$store.commit('updateMessage')">Update</button>

アクション

最低限、ステートとミューテーションがあれば実装可能です。

こちらのアクションは基本的に、API通信を伴う場合に利用します。

アクションでミューテーションを利用して、値を変更します。

[サンプルコード(store -> index.js)]

   updateMessageAction(context){
       context.commit('updateMessage', 'Commit by action')
   } 

[サンプルコード (pages -> index.vue)]

dispathメソッドで呼び出すことを覚えておこう。

<button v-on:click="$store.dispatch('updateMessageAction')">Action</button>

ゲッター

stateの値を加工して取り出したいときにこちらを利用します。

加工する必要が無い場合は、getterを経由せず直接stateの値を取りにいって大丈夫です。

export const getters = {
    getMessage(state){
        return state.message + '田中さん'
    }
}

「こんにちは、田中さん」

と返却するためのgetterを用意してみました。


まとめ

mutationとactionの使い分けがイマイチ理解できていないが、使ううちに理解すれば良いかなという感覚です。


この記事が気に入ったらサポートをしてみませんか?