vuex实现数据持久化

vuex-状态管理工具

对于vuex来说,它只是一个状态管理工具,当有些变量不止在组件间用时,可能很多页面都会复用。我们使用vuex进行管理。

state:设置初始值状态。

getters:store仓库的计算属性,主要作用是派生出一些新的状态。比如将state状态的数据进行一次映射或者筛选。

mutations:对state数据进行赋值操作,并进行相应操作;利用store.commit()触发该操作,

actions处理异步操作,可以使用commit方法,使用store.dispatch()触发。

实现数据的持久化--跟localStorage结合使用

设置state的状态:

const state = {
    status: '0'
};

设置getters:

    getStatus(state) {
        let t = localStorage.getItem('isLogined')
        if (t == null || t== undefined) {
            t = state.isLogined;
        }
        state.isLogined=t;
        return state.isLogined;
    }    

设置mutations:

SET_STATE(state, val) {
        state.status = val;
        try {
            localStorage.setItem('isLogined',val);
        } catch (e) {
            console.log(e);
        }
    }

使用-----在页面的计算属性 根据getter获取状态

 

computed:{
      isLogined(){
        return this.$store.getters['getStatus'];
    }   
}        

 操作----修改状态即在方法中调用commit:

methods:{
  handleStatus(){
     this.$store.commit('SET_STATUS','1');        
  }
}

(小知识点:如果是在公共函数内调用,请引入store的index的js文件,调用store.getters和store.commit)

storage的存储方式:

localStorage的存储是按照字符串存储的(以上例子为存储字符串格式)。如果存储为对象格式,会出现返回值是{Object object}的情况,那么,存储时要将数据转成string格式,请使用如下方式:

   localStorage.setItem('obj',JSON.stringfy(object));

storage的读取和使用:

   JSON.parse(localStorage.getItem('obj'));

注意点:

getter的值是要根据依赖值进行变化的, 即如果return的返回值不是state的数据,则监听不到数据变化。

假如只是return localStorage.getItem('status')的话, 则数据不会更新。必须进行state的赋值和return操作。

如果不需要对数据二次改造的话,也可以写到state的初始值: status: localStorage.getItem('isLogined') || '0'。这样的话取数据只能用this.$store.state.status来获取了。

 

上一篇:webstorage、Mysql、node


下一篇:防止localStorage和sessionStorage在开发工具中被篡改