田無rb#1
勉強の記録をブログに残していこうかなという気持ちになったので(続くかは分かりません!)筆を執ってみました@田無のカフェ
テンションがアゲアゲになるので勉強会っぽいタイトルにしてみましたが、ただ一人でモクモクしているだけです
以前やっていた「Vue.js&Nuxt.js超入門」という本の写経の続きをやっていきます(rbとはなんだったのか)
Chapter5「Nuxt.jsにアップグレード!」の中途半端ところで止まっていたのでその続きから
久しぶりすぎてアプリの起動方法を忘れている。本を遡って以下のコマンドで実行できることを確認
$ npm run dev
それでは読み進めていきやしょう
Section5-3 Vuexによる状態管理
の途中の
アクションを利用する
ミューテーションを実行するためのアクションを利用するとのこと
ミューテーションってなんだっけ…本を遡って確認
stateを直接書き換えるのは推奨されていないからミューテーションという機能を使ってネ
とのこと
このミューテーションを実行するのがアクション アクションの第一引数にはcontextというオブジェクトが渡され、contextのcommitメソッドを使ってミューテーションを実行するらしい
mutations: { foo: function(state) { ... }, bar: function(state) { ... } }, actions: { baz: function(context) { context.commit('foo'); context.commit('bar'); } }
テンプレートから以下のように呼び出すことができる
<div @click="$store.dispatch('baz')"></div>
複数のミューテーションを一つのアクションから呼び出すように定義できて便利!ということなのかな
値をずっと保持するには?
stateの値はリロードすると消えるからそれをローカルストレージに保持してみましょうという話 vuexに標準でその仕組みはないらしいのでプラグインをインストール
$ npm install vuex-persistedate
vuex-persistedstateとモードについて
ローカルストレージに保存する仕組みのため、サーバサイドレンダリングを使う場合は利用できない Vuexのモードを変更する必要があるとのこと デフォルトではサーバサイドとクライアントサイドどちらのレンダリングにも対応しているがそれをspaモードに書き換え
nuxt.config.js
のmodeを指定している行を以下のように書き換え
mode: 'spa',
Vuexでvuex-persistedstateを利用する
store/index.js
にて vuex-persistedstate
を読み込む設定を追加する
下記コードの importの部分とpluginの部分だけ追記すれば良さそう
手元では他にも一部書き換えている(アクションの部分をミューテーションに書き換えている)けど直接的な影響は無さそう
一部抜粋
import Vuex from "vuex" import createPersistedState from "vuex-persistedstate" const createStore = () => { return new Vuex.Store({ ... plugins: [ createPersistedState(), ], }) } export default createStore
テンプレート側も修正(アクションを呼び出していたのをミューテーションを呼び出す形にする)
<div class="link" @click="$store.commit('doit')">
リロードしても値が保持されたままになっている〜 🎉
今日はここまで