组件中获取不到vuex里的数据,怎么解决?
问题描述
我在做 cnodejs 的话题展示页,cnode-article-vx.vue 和 author.vue 有共同的父组件 detail.vue,cnode-article-vx.vue 中通知 vuex 发请求拿到话题数据,保存在 vuex 里。
author.vue 中,我想拿到 vuex 存的话题数据中的作者,再发请求获取用户数据。但是我在获取作者时报错了。
相关代码
cnode-article-vx.vue
methods: {
//通知 vuex 获取文章细览及向上传递作者名、回复
getDetailVuex(){
this.$store.commit('showSpinMu', {show: true});
let id = this.$route.params.id;
let accesstoken = Cookies.get('accesstoken');
if(accesstoken){
//登录了
this.$store.dispatch('getDetailAc', {id, accesstoken});
}else{
//没登录
this.$store.dispatch('getDetailAc', {id});
}
}
}
vuex
actions: {
//获取文章细览
getDetailAc(store, payload) {
let accesstoken = payload.accesstoken ? payload.accesstoken : '';
return getDetail(payload.id, { accesstoken }).then(({ data }) => {
store.commit('detailMu', { detail: data.data });
});
}
},
mutations: {
//文章细览
detailMu(state, payload) {
state.detail = payload.detail;
state.spinShow = false;
console.log(state.detail.author.loginname);
}
}
author.vue
computed: {
//从 vuex 获取作者名
authorName(){
return this.$store.state.detail.author.loginname;
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
在 vuex 中能够打印出 loginname,author.vue 报的错误如下:
Uncaught (in promise) TypeError: Cannot read property 'loginname' of undefined
请问该怎么解决?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
子组件计算属性会先执行,当时 state.detail 还没有被赋值,也就是说还不具有 author 或者 loginname 属性,所以要在 authorName 中 return 之前,执行一次 commit 赋值;如: