Vue.js + VuexでステートをブラウザのLocalStorageに保存・復元して永続管理する
Vue.js + Vuexでステート管理する際に、ブラウザのウィンドウやタブを閉じた際にも、ステートを保持できるように、ブラウザのLocalStorageにステートを保存・復元することで、ステートを永続管理する方法をまとめました。
公開日:2019年9月19日
Vuexのステート管理と動作
Vueの状態管理を担うVuexは、Vueアプリ全体でデータを取得・更新できるため、非常に便利です。
しかし、Vuexはブラウザのセッションごとにデータを持っているため、ブラウザやタブを閉じた際や、新しいタブで開いた際には、ステートは初期化されてしまいます。
例えば、流行りのダークモードなどのフラグをVuexのステートで持っていて、ブラウザを閉じてまた開いた時などは、そのフラグは、最後に設定したステートを復元してくれる方がユーザーフレンドリーです。
そこで、Vuexとブラウザのローカルストレージを利用して、Vuexのステートデータを永続化させることで、これらの問題を解決します。
Vuexのステートを永続化する方法
プラグインを使う
Vuexのステートを全てLocalStorageに保存してくれる便利なプラグイン「vuex-persistedstate」が用意されています。
このプラグインをnpmなりyarnなりでインストールして、storeファイルで、
import createPersistedState from "vuex-persistedstate";
export default new Vuex.Store({
plugins: [createPersistedState()]
})
とすれば、即永続化してくれるので楽チンです。
mutationを用意する
プラグインを使わない場合は、storeのmutationで保存、復元をすればOKです。
localStorage.setItem('darkMode', JSON.stringify(state.darkMode)); // 保存
state['darkMode'] = JSON.parse(localStorage.getItem('darkMode')) // 復元
プラグインを使ったほうが楽ですが、自分で書くと保存するステートを管理しやすいというメリットもあります。
自分の場合は、actionでステートを更新するたびにLocalstorageに保存して、App.vueをレストアactionを登録して、Createする度に(ページがロードされるたび)ステートがレストアされるようにしています。
以上、ざっくりとですが、Vuexのステートを永続化する方法を見てきました。
SPAを作る際、Vuexでステート管理は外せない部分だと思うので、永続化させてさらにユーザービリティをあげたいですね。
新着ノート
-
NUXT3
公開日:2023年2月16日
-
NUXT3
公開日:2023年1月30日
新着コード
-
Vue.js
公開日:2022年4月18日
-
Vue.js
公開日:2022年4月13日