我通过redux connect声明状态
>>> MyClass.fullname
<property object at 0x7f30e3917958>
>>> MyClass.fullname.__set__
<method-wrapper '__set__' of property object at 0x7f30e3917958>
通过控制台日志const mapStateToProps = state => ({
singleBase: state.interaction.base
});
export default requiresLogin()(connect(mapStateToProps)(BasePage));
console.log(this.props.singleBase);
在后端,我有以下模型:
id: "5b757e6743904228586a5a7f"
creatorId: "5b6e39ce08406602d0a9e125"
title: "tester"
currentUsers: 2
messages: 0
但是当我尝试控制台记录const BaseSchema = mongoose.Schema({
creatorId: { type: mongoose.Schema.Types.ObjectId, required: true },
title: { type: String, required: true },
currentUsers: { type: Number, default: 0 },
messages: { type: Number, default: 0 }
});
的值:currentUsers
时,出现以下错误:console.log(this.props.singleBase.currentUsers);
。
我都尝试将Schema设置为纯数字,例如5,以及文字“ 5”。两者均无效。我缺少什么细节才能获得Cannot read property 'currentUsers' of undefined
的价值?
编辑和解决方案:
currentUsers
在此,我们确保this.props.singleBase存在且为true,而我确保this.props.singleBase.currentUsers的值未定义。如果两个都为真,则显示this.props.singleBase.currentUsers。关键是在异步操作完成之前,singleBase将为空。填充数据后,我可以显示currentUsers值。
答案 0 :(得分:0)
您很可能会异步获取此数据,这就是为什么您会收到此错误的原因。在登录this.props.singleBase
之前,您应该在控制台中看到undefined
。这不会引发错误,但是如果您尝试获取未定义对象的某些属性,则会遇到此错误。尝试记录未定义的对象是可以的,但是尝试记录未定义该对象的属性是不可行的,因为此时该对象是undefined
。
您可以在记录前加上一个条件:
this.props.singleBase && console.log(this.props.singleBase.currentUsers);
这是您将来要做的而不是记录它们的操作。因此,请始终记住,如果您正在执行异步作业,则第一个渲染中将没有数据。
答案 1 :(得分:0)
可能是因为您要在加载当前状态之前console.log
进行操作。尝试在获取异步数据时设置一些标志,例如loading=true
,然后在加载后将其更改为false
。
答案 2 :(得分:0)
const users =
this.props.singleBase && this.props.singleBase.currentUsers !== undefined
? this.props.singleBase.currentUsers
: 0;
return (
<div>
<h2>{users}</h2>
</div>
);
在此,我们确保this.props.singleBase
存在且为true
,同时确保this.props.singleBase.currentUsers
的值未定义。如果两个都为真,则显示this.props.singleBase.currentUsers
。关键是在异步操作完成之前,singleBase将为空。填充数据后,我可以显示currentUsers值。