gpt4 book ai didi

javascript - Vuex 在通过开发工具手动提交之前不会提交更改

转载 作者:行者123 更新时间:2023-11-30 19:23:37 26 4
gpt4 key购买 nike

我有一个名为 login.js 的 vuex 存储模块,如下所示

import axios from "axios";
import router from "@/router";

axios.defaults.baseURL = process.env.VUE_APP_API_ENDPOINT;

const state = {
access_token: localStorage.getItem("access_token") || null,
};

const getters = {
loggedIn() {
return (
state.access_token != null && localStorage.getItem("access_token") != null
);
}
};

const mutations = {
doLogin(state, response) {
const token = response.authentication_data.access_token;
localStorage.setItem("access_token", token);
state.access_token = token;
router.push("/admin");
};

const actions = {
async getToken({ commit }, userdata) {
let email = userdata.email;
let password = userdata.password;
let remember_me = userdata.remember_me;

await axios
.post("auth/login", null, {
params: {
email,
password,
remember_me
}
})
.then(response => {
if (response.data.meta.status == "true") {
commit("doLogin", response.data);
} else {
alert("wrong password");
}
})
.catch(error => {
alert(error);
});
};

export default {
state,
getters,
actions,
mutations
};

登录.vue代码

  methods: {
...mapActions(["getToken"]),
login() {
const userdata = {
email: this.email,
password: this.password,
remember_me: true
};

this.getToken(userdata);
}
}

登录功能有效并且第一次设置了 token ,但是当我刷新浏览器时,access_token 消失了。

在浏览器中显示如下

enter image description here

但如果我通过开发工具提交,它会起作用并且状态会变得持久。

关于SO的类似性质的问题,但不要回答这个问题。

vuex commit does not commit to store

Vue2 + Vuex Commit Not Committing (without Vue devtools)

Vuex Mutation running, but component not updating until manual commit in vue dev tools

如何通过代码使 state.access_token 持久化?问题是页面刷新时我丢失了 state.access_token 值。

最佳答案

您的代码没有问题,Vuex 成功地将您的数据“提交”到商店。您遇到的问题是因为 Vuex(开箱即用)不会将您的数据保存在 localStorage 中,我相信这就是您所说的“提交”的意思。正如在对你的问题的评论中多次提到的那样,你将需要使用第三方包(大多数人使用 Vuex-PersistedState ,但我更喜欢 Vuex-Persist 因为它更可定制并支持 Typescript)。任何一个都非常容易上手。

使用 Vuex-PersistedState,您需要使用新插件更新您的 Vuex 初始化。它应该看起来像这样:

import createPersistedState from 'vuex-persistedstate' // import the package

const store = new Vuex.Store({
plugins: [createPersistedState()] /// include the imported plugin
})

关于javascript - Vuex 在通过开发工具手动提交之前不会提交更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57169975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com