【发布时间】:2020-09-11 02:12:14
【问题描述】:
我要疯了。我有一个反应类,它有一些这样的方法:
handleSubmit = (e) => {
this.setState({
isLoading: true,
}, this.doSearch());
}
changePage = (e) => {
this.setState({
searchPage: e,
isLoading: true
}, this.doSearch());
}
当用户在该组件的渲染中点击搜索表单上的提交时,我使用handleSubmit。
<button type="button" id="btn-search" onClick={event => this.handleSubmit(event)}>Search</button>
这很好,它提交,设置状态,然后在设置 isLoading: true 后调用 this.doSearch。
获得搜索结果后,我调用一个子组件来显示结果列表,并为它提供一个处理程序,以便用户点击分页:
<ResultList searchResult={searchResult} changePage={this.changePage} />
在孩子内部,只有一个带有 onClick 的简单跨度:
<span onClick={event => props.changePage(props.searchResult.page + 1)}>>></span>
所以当用户点击下一页... pager 时,处理程序被调用。我可以注销e 并看到数字增加了。然后我调用 setState 并告诉它在状态更新后使用父类的doSearch()。相反,这是我的目标。但它在状态更新之前一直运行doSearch()。但我知道状态在某些时候会完成更新,因为当组件重新渲染时,状态已更新为 searchPage。
在状态更新完成后,我似乎能够让它运行我的回调的唯一方法是将它包装在一个箭头函数中,使其看起来像这样:
changePage = (e) => {
this.setState({
searchPage: e,
isLoading: true
}, () => {
this.doSearch()
});
}
这只是changePage 的问题,它被传递给子组件,然后从那里调用,目的是增加或减少searchPage。从提交处理程序调用this.doSearch() 很好。
我觉得我不了解范围界定或 this.state 或实例或其他东西......
【问题讨论】:
标签: javascript reactjs