why?

在vuex的时候 刷新以后里面存储的state就会被浏览器释放掉,因为我们的state都是存储在内存中的,所以一刷新页面就会把state中的数据重置,这就涉及到vue数据持久化的问题。

使用vuex的插件 来解决

使用vuex-persistedstate
首先我们先安装这个插件

  1. npm i -S vuex-persistedstate

配置使用

在vuex初始化的时候作为组件去引入

  1. import { createStore, createLogger } from 'vuex'
  2. import home from './modules/home'
  3. import dome2 from './modules/dome2'
  4. import persistedState from 'vuex-persistedstate'
  5. const debug = process.env.NODE_ENV !== 'production'
  6. export default createStore({
  7. modules: {
  8. home,
  9. dome2
  10. },
  11. strict: debug,
  12. plugins: debug ? [createLogger(),persistedState()] : []
  13. });

特殊情况

vuex-persistedstate默认使用localStorage来固化数据,一些特殊情况要如何应对呢?(如:Mac中的safari的无痕浏览模式)
这时候就需要使用sessionStorage

  1. plugins: [
  2. persistedState({ storage: window.sessionStorage })
  3. ]

还有一种就是使用cookie的时候

  1. import persistedState from 'vuex-persistedstate'
  2. import * as Cookies from 'js-cookie'
  3. export default new Vuex.Store({
  4. // ...
  5. plugins: [
  6. persistedState({
  7. storage: {
  8. getItem: key => Cookies.get(key),
  9. setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
  10. removeItem: key => Cookies.remove(key)
  11. }
  12. })
  13. ]
  14. })

使用vuex-persistedstate指定需要持久化的state

  1. import persistedState from "vuex-persistedstate"
  2. plugins: [
  3. persistedState({
  4. storage:window.sessionStorage,
  5. reducer(val) {
  6. return {
  7. // 只储存state中的token
  8. assessmentData: val.token
  9. }
  10. }
  11. }
  12. )]

最后我们在页面里需要使用辅助函数以及dispatch来触发就可以实现数据持久化
这样我们就可以使用vuex来进行储存数据了