页面刷新,存入vuex数据消失

645 阅读1分钟

问题描述:

登录模块:

点击登录按钮,触发事件调用后端api,成功时,从后端拿到token。把token存到vuex,使多个组件共享token数据。但是发现,登录后跳转到别的路由后,或者是刷新了页面,vuex里面存的token数据消失了。

登录成功后:

vuex数据丢失.png

登录成功后,刷新页面: 存入vuex数据丢失

刷新登录页面.png

原因:

因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例(vuex实例是绑在vue实例上面的。),store里面的数据就会被重新赋值初始化

解决方案:

因为:当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值初始化,所以在vue实例每次被重新加载的时候,把token重新存到vuex里面,这样就可以解决 vuex 里面的token 消失了。

所以在vue实例里面的跟组件App.vue里面将token重新存到vuex里面。


<script>
//解析token的中间件jwt-decode
import jwt_decode from "jwt-decode";
// 每次页面刷新,根组件App.vue都会被重新构建
export default {
  created() {
    if (localStorage.eleToken) {
      const decode = jwt_decode(localStorage.eleToken);
      this.$store.dispatch("setIsAutnenticated", !this.isEmpty(decode));
      this.$store.dispatch("setUser", decode);
    }
  },
  methods: {
    isEmpty(value) {
      return (
        value === undefined ||
        value === null ||
        (typeof value === "object" && Object.keys(value).length === 0) ||
        (typeof value === "string" && value.trim().length === 0)
      );
    }
  }
}

</script>