页面重定向后未保留 Vuex 状态

Posted

技术标签:

【中文标题】页面重定向后未保留 Vuex 状态【英文标题】:Vuex state not preserved after page redirect 【发布时间】:2018-03-08 13:07:36 【问题描述】:

在 Vue.js 中,我有这种方法来登录用户,设置值 int vuex 存储,然后重定向到主页:

   login: function () 
            axios.post( this.BASE_URL + "/login", 
            username: this.username,
            password: this.password,
          ).then( (res) =>  
                this.$store.commit('setIsAuthenticated', true);
                this.$store.commit('setToken', res.data.token);
                this.$store.commit('setPhoto', res.data.photo);
                this.$store.commit('setUsername', res.data.username);
                window.location.href = '/home'; //<-The problem     
          

突变示例:

setToken: function (state, token) 
    state.token = token;
    ,
setUsername: function (state, username) 
    state.username = username;
,

App.vue(根组件),我只是从存储中获取值作为计算值:

  computed: 
    isAuthenticated () 
    return this.$store.state.isAuthenticated;
    ,

    token () 
        return this.$store.state.token; 
     ,

当我注释掉 window.location.href = '/home'; 时,我在 Vue.js 控制台中看到登录成功并且在商店中设置了值,但是一旦页面被重定向到 /home,所有商店值都会被清空。 我想知道为什么会发生这种情况以及如何解决?

更新: 我在 routes.js 中使用 vue-router,如下所示:

import webLogin from './components/webLogin.vue';
import showAll from './components/showAll.vue';

export default [ 
  path:'/', component: showAll ,
  path:'/add', component: addJoke    ,
  path: '/login', component: webLogin,  
]

【问题讨论】:

你使用Vue路由器吗? 是的,我确实使用 vue 路由器。 window.location.href 加载一个全新的页面。如果您需要数据在页面请求中可用,则需要将其保存在某个地方。我现在会选择localStorage 试试github.com/robinvdvleuten/vuex-persistedstate 或github.com/crossjs/vuex-localstorage 这个答案可能会有所帮助:***.com/questions/43027499/vuex-state-on-page-refresh/… 【参考方案1】:

使用 Vuejs 在页面之间导航,不要手动操作

除非您使用 Vuejs 路由从一个页面导航到另一个页面,否则不会保留状态。考虑这两种情况

    从一页设置商店中的状态后。您直接在浏览器窗口中输入另一个页面的 URL,然后按 Enter。检查商店中的状态。它不会被保留,并将被重置为默认值。 从一页设置商店中的状态后。您使用 Vuejs 路由导航到另一个页面

在 Nuxtjs 中

<nuxt-link to="discussion/1">Go to Discussion</nuxt-link>

在 Vuejs 中

<router-link to="discussion/1">Go to Discussion</router-link>

检查商店中的状态。它会保存在商店里。

【讨论】:

【参考方案2】:

Vuex 状态保存在内存中。如果您使用window.location.href 重定向,这将触发整个页面加载,这将清除您当前的状态。您必须使用 Vue 路由器进行导航https://router.vuejs.org/en/

例如,如果您的路线名称是 Home,您可以像这样重定向:

this.$router.push( name: 'Home' );

【讨论】:

能否详细说明如何在我的代码上下文中使用 vue 路由器进行重定向? 我编辑了我的答案,但不确定您是如何设置路线的。 我添加了this.$router.push( path: '/home' );,现在它就像一个魅力。谢谢!

以上是关于页面重定向后未保留 Vuex 状态的主要内容,如果未能解决你的问题,请参考以下文章

标头重定向后未定义PHP会话索引?

使用 IPN 方法的 Paypal 付款在付款后未重定向

firebase.auth().signOut() 在单击注销后未重定向回 mainNav

htaccess 重定向到新页面但保留“get”参数

如果用户未在 vuex 中登录,如何使路由重定向到登录

使用 htaccess 重定向页面,但保留 URL 结构并仅更改域