在 nuxt 中使用 vuex,为了数据持久化使用 vuex-persistedstate,但是在使用中发现找不到 window 对象,因此需要借助 cookie 来完成。
使用 vuex-persistedstate
1
| npm install --save vuex-persistedstate
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import createPersistedState from "vuex-persistedstate"; import vuex from "vuex"; const conststore = new vuex.Store({ plugins: [ createPersistedState({ storage: window.sessionStorage, reducer(val) { return { }; } }) ] });
|
使用 js-cookie
1
| npm install --save js-cookie
|
在 plugins 中新建文件 localStorage.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import createPersistedState from "vuex-persistedstate"; import * as Cookies from "js-cookie";
let cookieStorage = { getItem: function (key) { return Cookies.getJSON(key); }, setItem: function (key, value) { return Cookies.set(key, value, { expires: 3, secure: false }); }, removeItem: function (key) { return Cookies.remove(key); } };
export default context => { createPersistedState({ storage: cookieStorage, getState: cookieStorage.getItem, setState: cookieStorage.setItem })(context.store); };
|
在 nuxt.config.js 中新增
1
| plugins: [{ src: '@/plugins/localStorage.js', ssr: false }],
|
这两者结合使用,会发现页面刷新后保存在 vuex 中的数据仍然有效,不会回到初始数据。