• vuex组件 vuexpersistedstate


    vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据状态持久化,但是太麻烦每次都要操作,所以此时就可以利用vuex-persistedstate插件

    安装

    npm install vuex-persistedstate --save

    1.使用vuex-persistedstate默认存储到localStorage

     引入及配置:在store下的index.js

    import createPersistedState from "vuex-persistedstate"
    const store =newVuex.Store({
      state: {
        count: 1
      },
      mutations: {},
      actions: {},
      // 当state中的值发生改变,此时localStorage中的vuex的值会同步把state中的所有值存储起来,当页面刷
       新的时候,state的值会从localStorage自动获取vuex的value值,赋值到state中
      plugins: [createPersistedState()]
    })

    2.使用vuex-persistedstate存储到sessionStorage

     引入及配置:在store下的index.js

    import createPersistedState from "vuex-persistedstate"
    const store = newVuex.Store({
       state: {},
       mutations: {},
       actions: {},
       plugins: [createPersistedState({
           storage:window.sessionStorage  // 同localStorage相同,只是将vuex的所有值存储到sessionStorage中
       })]
    })

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

     引入及配置:在store下的index.js

    import createPersistedState from "vuex-persistedstate"
    
    const store = newVuex.Store({
     state: {
      count: 0
    },
     mutations: {},
     actions: {},
     plugins: [createPersistedState({
       storage:window.sessionStorage,
       reducer(val)  {
             // 此时,当count发生改变的时候,就会调用此函数,并且val的值为当前state对象,return的值为当前本地存储的value值(本地存储的key值为vuex)
             return {
                 count: val.count,
             changeCount: 'aaa'
             }
         }
     })]
    })

    下边附上当前测试写的小demo,通过vuex控制组件中的加减运算

    import Vue from 'vue'
    import Vuex from 'vuex'
    import createPersistedState from 'vuex-persistedstate'  // 用于vuex状态管理与本地存储同步
    
    Vue.use(Vuex)
    
    const Store = new Vuex.Store({
      state: {
        count: 0,
        computedCount: 0,
        bb: 'bb'
      },
      mutations: {
        add(state, n = 1) {
          state.count += n
        },
        sub(state, n = 1) {
          state.count -= n
        }
      },
      actions: {
        addSync(context, n) {
          setTimeout(function () {
            context.commit('add', n)
          }, 1000);
        },
        subAsync(context, n) {
          setTimeout(() => {
            context.commit('sub', n)
          }, 1000)
        }
      },
      getters: {
        comp(state) {
          return `当前的count为${state.count + 1}`
        }
      },
      plugins: [
        createPersistedState({
          // 当state中的值发生变化的时候出发reduce函数
          reducer(val)  {
            console.log(val)  // value值为当前state中的所有值对象
            // return什么,localstorage中的key值为vuex的value值就是什么,而且是实时与state中的值保持同步
            return {
                count: val.count || 0,
                computedCount: val.computedCount,
                aa: 1
            }
        }
        })
      ]
    })
    
    export default Store
  • 相关阅读:
    简单的jQuery无缝向上滚动效果
    http://yuanma.wxb0.com/ 唯品源码网站
    vue.js 2.0 --- 安装node环境,webpack和脚手架
    记住密码后,密码框Password会自动带出数据
    http://ask.dcloud.net.cn/question/11695 nativeUI的使用(移动的)
    微信内置浏览器 如何小窗不全屏播放视频?
    webstrom快捷键
    6个html5页面适配iphone6的技巧
    rem的js
    docker打包容器成镜像文件、镜像文件加载到镜像
  • 原文地址:https://www.cnblogs.com/xiaoyaoxingchen/p/16202848.html
Copyright © 2020-2023  润新知