我的应用程序使用Firebase API进行用户身份验证,将登录状态保存为Vuex状态下的布尔值.

当用户登录时,我设置了login status,并有条件地显示相应的登录/注销按钮.

但是当​ 页面刷新后,vue应用程序的状态将丢失并重置为默认状态

这会导致一个问题,因为即使用户登录并刷新页面,login status也会被设置回false,并且即使用户保持登录,也会显示登录按钮而不是注销按钮....

What shall I do to prevent this behavior

我要用cookies

    -

推荐答案

这是一个已知的用例.有不同的解决方案.

例如,一个人可以使用vuex-persistedstate.这是一个插件,用于vuex处理和存储页面刷新之间的状态.

示例代码:

import { Store } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import * as Cookies from 'js-cookie'

const store = new Store({
  // ...
  plugins: [
    createPersistedState({
      getState: (key) => Cookies.getJSON(key),
      setState: (key, state) => Cookies.set(key, state, { expires: 3, secure: true })
    })
  ]
})

我们在这里做的很简单:

  1. 你需要安装js-cookie
  2. getState上,我们try 从Cookies加载保存的状态
  3. setState岁时,我们将我们的州挽救到Cookies

文档和安装说明:https://www.npmjs.com/package/vuex-persistedstate

Vue.js相关问答推荐

VueJS使所有组件崩溃,而不是只有一个

Vue ChildComponent (GrandchildComponent) 应该更新 ParentComponent 的列表

Vue 3:插槽属性 - 可以通过 props 传递数据吗?

Vue3外部数组的响应性

已分配计算(computed)属性,但它没有设置器

VueJS:为什么在input事件处理程序中触发Input输入事件?

运行vue-cli-service build --watch时没有 CSS 文件

有条件地在 Vue 中添加一个 CSS 类

未捕获的错误:[vue-composition-api] 必须在使用任何函数之前调用 Vue.use(plugin)

Django Rest 框架、CSRF 和 Vue.js

我可以使用 vue.js v-if 来判断值是否存在于数组中

如何使表格行可点击并展开行 - vue.js - element-ui

如何打破 vue.js 中的 v-for 循环?

Vue Prop 没有初始化器,也没有在构造函数中明确赋值

为什么 v-model 不适用于数组和 v-for 循环?

如何在 Vuex 中获取 Vue 路由参数?

如何在 vue.js 中进行嵌入?

VueJS 2 + ASP.NET MVC 5

在 vue js 中的何处以及如何存储 API 端点?

隐藏特定标题及其在 vuetify 数据表中的对应列