我可以在console.log(this.state.eventUser);
渲染返回中调用数据,并在eventUser中显示所有数据。但是,当我尝试调用console.log(this.state.eventUser._id);
时,它显示此Uncaught TypeError: Cannot read property '_id' of undefined
的错误。我该如何解决这个问题?
componentDidMount(){
Tracker.autorun(() => {
Meteor.subscribe('allUsers');
const userId = this.props.location.state.event.userID;
const eventUser = Meteor.users.findOne({_id: userId});
this.setState({ eventUser });
});
}
render(){
return(
<div>
{console.log(this.state.eventUser._id)}
</div>
);
}
答案 0 :(得分:0)
如果不将{}括起来,则无法在JSX中使用console.log 尝试下面的代码
typeof(object).Assembly.Location
编辑:
您的代码正在异步执行数据库查询 因此,您需要等待它完成。 以下是async / await(JavaScript的ES7 +功能)的实现
尝试下面的代码
render(){
return(
<div>
{put javascript here}
</div>
);
}
答案 1 :(得分:0)
渲染中的某个位置this.state.eventUser
可能未定义。
尝试一下
{this.state.eventUser && console.log(this.state.eventUser._id)
答案 2 :(得分:0)
在您的render()
函数运行时,似乎用户尚未保存到组件状态。
要解决此问题,请在您的组件中添加一个构造函数,在其中将eventUser定义为一个空对象。
class MyClass extends Component {
constructor(props) {
super(props);
this.state {
eventUser: {}
};
}
componentDidMount() {
Tracker.autorun(() => {
Meteor.subscribe('allUsers');
const userId = this.props.location.state.event.userID;
const eventUser = Meteor.users.findOne({_id: userId});
this.setState({ eventUser });
});
}
render(){
console.log(this.state.eventUser._id)
return(
<div>My Test Page</div>
);
}
}
希望有帮助!
答案 3 :(得分:0)
componentDidMount
将在组件已安装后触发(如名称所示)。在到达封闭语句时,状态尚未设置。
我不确定您为什么在渲染返回中使用console.log,但是如果您希望实际显示用户ID,则条件渲染是您的朋友:{this.state.eventUser && this.state.eventUser._id}
答案 4 :(得分:0)
在第一次呈现组件时,如果您了解React生命周期挂钩,则在构造函数之后将触发render method
,然后触发componentDidMount
挂钩。
因此对于第一个渲染eventUser
是未定义的,然后在componentDidMount
之后将满足状态。
解决方法是:
console.log
放在JSX中,最好将其放在return
之前。代码:
render(){
const { eventUser } = this.state;
// if eventUser is defined then log it
{eventUser && console.log(eventUser._id)}
// or you can add very simple load state
if(!eventUser) return <h1>Loading....</h1>
return(
<div>
{probably info about user }
</div>
);
}