javascript - 刷新页面后Vuex无法读取属性
问题描述
Navbar
当我在他中使用来自 Vuex 商店的值时,我有一个组件。在进入每条路线之前,我从 vuex 运行调度,如下所示:
router.beforeEach((to, from, next) => {
//...
store.dispatch("updateUserData");
next();
});
我的商店:
const actions = {
updateUserData({ commit }) {
UserService.getUserData().then(
(response) => {
commit("updateUserState", response.data);
},
(error) => {}
)
},
}
const mutations = {
updateUserState: function(state, user) {
state.user = user;
},
}
const getters = {
getUser: (state) => {
return state.user;
}
}
另外在我的Navbar
组件中我有这个:
computed: {
currentUser() {
return this.$store.getters.getUser;
}
},
并像这里一样使用这个值:
<p style="border-left: 1px solid black" class="navIcon pl-4 py-1">
{{ currentUser.firstName }} {{ currentUser.lastName }}
</p>
现在是问题,当我打开使用它的页面时navbar
,我的控制台和组件工作正常,一切正常,我正确渲染了视图,但是刷新页面后,我的视图上仍然有正确的数据,但是我的控制台向我抛出此错误:
vue.esm.js?a026:628 [Vue warn]: Error in render: "TypeError: Cannot read property 'firstName' of null"
found in
---> <Navbar> at src/layouts/Navbar.vue
<App> at src/App.vue
<Root>
warn @ vue.esm.js?a026:628
vue.esm.js?a026:1897 TypeError: Cannot read property 'firstName' of null
有人可以告诉我这里有什么问题吗?谢谢你的帮助!
解决方案
在我看来,您的操作是异步的,并且当您的组件呈现时,数据可能无法用于 getter。
beforeEach
您可以尝试将您的操作变成异步操作,它返回一个承诺,并在调用之前等待它解决next
。
刷新后尝试调试您的应用程序。查看 vue 存储,在组件mount
等中记录当前用户的值...
推荐阅读
- javascript - Mobx 和 React 异步函数调用会冻结 UI,而 onClick 调用不会
- c++ - 使用内核驱动程序c ++写入只读地址
- c# - StringBuilder AppendLine 方法未将换行符添加到 HTML 输出
- c++ - c++ 中的 unordered_set 中是否存在任何顺序?
- amazon-redshift - 需要在 LAG 函数中包含偏移值作为 expr
- javascript - 有没有办法使用 highcharts 更改系列显示值
- sql - 在给定开放和关闭日期的情况下,随时间生成开放票的计数
- c++ - Boost::asio 到 Struct(如 recv)
- python - 如何使用 Python 删除 JavaScript 和其他标签...而不导入模块
- mysql - MySQL根据列B中的值排除列A中的结果,其中值在不同的行中