vuex 页面刷新 用localStorage保存数据的方案
大家都知道 使用vuex保存的state 在页面刷新后都会恢复默认值,网上的解决方案 很多,我是使用localStorage保存 当页面刷新时 如果发现store.state.userInfo.islogin这个状态为false的时候 用localStorage里存的token去访问后台得到是否已经登录 如果是则修改islogin的状态。但是action里的操作是异步的,let islogin = store.state.userInfo.islogin (false) 之后再访问后台之后才state里的islogin才为true。。。请问一下这个问题有什么好的解决方案吗
以下是相关代码
router.beforeEach((to, from, next) => {
if (to.path === '/login') {
// localStorage.removeItem('token')
}
if (!store.state.userInfo.islogin) {
store.dispatch('IS_LOGIN')
console.log(store)
}
let islogin = store.state.userInfo.islogin //false
console.log('sss', islogin, store)
if (!islogin && to.path !== '/login') {
next({ path: '/login' })
} else {
next()
}
})
actions
[IS_LOGIN] ({ commit }) {
commit(SET_USER_INFO, JSON.parse(localStorage.getItem('token')))
console.log(api, state)
api.apiObj.admin.islogin(state.userInfo)
.then((res) => {
if (res.status) {
commit(SUCCESS_GET_SNSLOGINS, true)
Message.success(res.msg)
} else {
Message.error(res.msg)
return commit(FAILURE_GET_SNSLOGINS)
}
})
}
mutations
[SET_USER_INFO] (state, data) {
state.userInfo = data
},
[FAILURE_GET_SNSLOGINS] (state) {
state.islogin = false
},
[SUCCESS_GET_SNSLOGINS] (state, status) {
state.islogin = status
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一方面你可以等状态从服务器端返回再显示页面。
另一方面即使先初始化再返回数据也无所谓吧,Vue 类 MVVM 框架最擅长的就是处理数据渲染呀。
我也这样想的,可惜具体不知道怎么弄,可以共享一下这一部分的代码吗