redux状态值返回未定义

时间:2018-08-19 21:41:55

标签: javascript reactjs redux

我通过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值。

3 个答案:

答案 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值。