在我的代码中,我有render()
函数。在这个方法中,this.state可用。如果this.LoadingIcon
只包含文字,那么一切都很好:
public render() {
return <div>
<h1>Search company</h1>
<this.LoadingIcon />
<label value={this.state.query} />
<div className='form-group'>
<input type='text' className='form-control' value={this.state.query} onChange={this.handleChange.bind(this)} />
</div>
<button onClick={() => { this.searchVat() }}>Search</button>
</div>;
}
但是,如果我突然想要使用状态并使LoadingIcon成为条件:
LoadingIcon(props: any) {
if (this.state.loading) {
return <h1>LOADING</h1>;
} else {
return <h1>NOT LOADING</h1>;
}
}
你得到了:
TypeError: Cannot read property 'state' of undefined
这是为什么?以及如何解决?
答案 0 :(得分:2)
您的代码存在两个问题:
this.state
未定义,因为LoadingIcon
是stateless component 要访问子项中父项的状态,您需要将状态作为prop传递:
<this.LoadingIcon loading={this.state.loading} />
然后在您的子组件中,您可以使用props来检索父级的状态:
LoadingIcon(props: any) {
if (props.loading) {
return <h1>LOADING</h1>;
} else {
return <h1>NOT LOADING</h1>;
}
}