vue.js - Vuex 不会将 isLogin 变量更改为 false()
问题描述
为什么这个功能context.commit('changeIsLogin', false);
在之后不起作用
logout() {
localStorage.removeItem('token');
this.$store.dispatch('asyncValidateToken');
}
在这段代码中?isLogin 不会更改为 false:
export default function (/* { ssrContext } */) {
const Store = new Vuex.Store({
state: {
isLogin: false
},
mutations: {
changeIsLogin (state, payload) {
state.isLogin += payload
}
},
actions: {
asyncValidateToken: async (context, payload) => {
await api.post('/accounts/token', '', {
headers: {
'Authorization': `Bearer ${localStorage.token}`,
}
})
.then(response => {
context.commit('changeIsLogin', true);
console.log(response.data);
return true
}, response => {
context.commit('changeIsLogin', false);
console.error(response.data);
return false;
});
}
}
})
解决方案
您的突变changeIsLogin
基本上是将有效负载添加到当前状态。所以你的代码:
changeIsLogin (state, payload) {
state.isLogin += payload
}
基本上相当于:
changeIsLogin (state, payload) {
state.isLogin = state.isLogin + payload
}
由于布尔值在对其进行算术运算时可以像数字一样起作用,因此您将遇到以下问题:
state.isLogin = false
payload = true
-->
state.isLogin = true + false = 1
state.isLogin = 1
payload = false
-->
state.isLogin = 1 + false = 1
等等。
所以你所要做的就是删除算术运算:
changeIsLogin (state, payload) {
state.isLogin = payload
}
推荐阅读
- python - 打开任务管理器后keyboard.add_hotkey停止工作
- vb.net - 如何正确关闭 VB.net Web 应用程序上的 sql 连接?
- omnet++ - VEINS/OMNeT++ 中的代码覆盖率计算和分析
- python - 在 Stripe Checkout 中,我如何使用循环在烧瓶中显示数据库中的多个产品
- node.js - 如何在车把页面的每个循环内访问从渲染页面发送的参数?
- python - 检查网络抓取变量的值是否已更改的最有效方法(Python,BeautifulSoup)?
- python - 我可以从 .py 文件中调用多个函数而不必单独导入每个函数吗?
- javascript - 代码镜像中的特定文本可以只读吗?
- c++ - 没有 case: 或 default: 标签的 switch 语句
- javascript - Chrome 扩展 postMessage & Listener