vuex中store保存的数据,刷新页面会清空

初用vuex,项目中需要记录一些状态,来判断页面是否为登录状态和页面是否可被编辑,此时用到了vuex中的store来存储一个状态。

//首先 安装vuex
npm install vuex --save  
//新建一个store文件夹,并在里面创建一个index.js文件,并导入
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
    state:{
        //id
        skillId:'',
        //技能状态
        checkStatus:''
    }
})

export default store

这里记录了两个值一个是id一个是状态值checkStatus,然后把创建的store在main.js里导入

import store from "./store"//vuex

至此,我们可以在所需要的vue文件中为其赋值

this.$store.state.skillId = '需要记录的id'
//技能状态
this.$store.state.checkStatus = '需要记录的状态'

赋值后,就可以在需要用到这些id和状态的vue文件中取值

'自己定义的变量名' = this.$store.state.checkStatus

现在,skillId和checkStatus相当于两个全局变量,可以在需要的页面获取值和更改值。但有一个严重的问题就是,在我们刷新页面的时候,vuex数据是重新初始化,无法获取的,导致出现了空值。
但这不是自己想要的结果,所以百度了一圈(https://blog.csdn.net/guzhao593/article/details/81435342http://www.cnblogs.com/padding1015/p/9272809.html),找到了解决办法。
更改store文件下index文件state的定义

const store = new Vuex.Store({
    state:sessionStorage.getItem('state') ? JSON.parse(sessionStorage.getItem('state')): {
        //id
        skillId:'',
        //技能状态
        checkStatus:''
    }
})

以及在App.vue中添加

mounted() {
            window.addEventListener('unload', this.saveState)
        },
        methods: {
            saveState() {
                sessionStorage.setItem('state', JSON.stringify(this.$store.state))
            }
        }

也就是说监听unload方法,如果重载页面就把state存入
sessionStorage,然后在需要state的时候从sessionStorage中取值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上一章总结了 Vuex 的框架原理,这一章我们将从 Vuex 的入口文件开始,分步骤阅读和解析源码。由于 Vuex...
    你的肖同学阅读 1,821评论 3 16
  • 姓名:岳沁 学号:17101223458 转载自:http://blog.csdn.net/h5_queensty...
    丘之心阅读 2,164评论 0 1
  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 2,970评论 0 7
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 9,769评论 1 52
  • 人傻钱多的时候我不会想怎么去骗钱,而是,看能不能救一个是一个。可事实证明,还是人类早点毁灭更好。这样我不用去杀人,...
    沙加之伦阅读 206评论 0 0