Javascript 反应:setState不会再次呈现页面

Javascript 反应:setState不会再次呈现页面,javascript,reactjs,react-lifecycle,Javascript,Reactjs,React Lifecycle,我正在与反应和生命周期作斗争。我尝试实现一个非常简单的下一步按钮,该按钮显示带有下一组项目的下一页。当我手动将状态偏移量更改为3时,页面将正确呈现,并包含下一项。但是,当我通过使用按钮使用setState时,不会加载新项目。我想这和生命周期有关,但我还不明白 类EventsListContainer扩展React.Component{ 状态={ 限额:3,, 偏移量:0 }; 组件安装{ const{loadEvents}=this.props; const{limit,offset}=thi

我正在与反应和生命周期作斗争。我尝试实现一个非常简单的下一步按钮,该按钮显示带有下一组项目的下一页。当我手动将状态偏移量更改为3时,页面将正确呈现,并包含下一项。但是,当我通过使用按钮使用setState时,不会加载新项目。我想这和生命周期有关,但我还不明白

类EventsListContainer扩展React.Component{ 状态={ 限额:3,, 偏移量:0 }; 组件安装{ const{loadEvents}=this.props; const{limit,offset}=this.state; loadEventslimit,offset; } onClickHandler==>{ 这个.setState{limit:3,offset:3}; const{limit,offset}=this.state; loadEventslimit,offset; }; 渲染{ const{events,isLoggedIn}=this.props; 回来 this.onClickHandler}>Next ; } } 对setState的调用是异步的。您可以通过添加回调来修复它,例如

this.setState({ limit: 3, offset: 3 }, () => loadEvents(this.state.limit, this.state.offset));
对setState的调用是异步的。您可以通过添加回调来修复它,例如

this.setState({ limit: 3, offset: 3 }, () => loadEvents(this.state.limit, this.state.offset));

loadEvents做什么?通常,您希望有一个作为函数的道具。然后,呈现组件的处理程序将调用此函数。所以状态被设置,props函数被调用,处理程序执行业务逻辑,然后重新呈现组件。我在这里看到的是,您只需设置没有副作用的状态。在setState的更新完成之前,您正在分解this.state。请记住,setState是异步的。loadEvents是一个Redux操作,它调用数据库端点并检索事件列表。我已将按钮移动到presentational组件,并通过props调用onClickHandler,状态已更改,但页面未呈现新项目。loadEvents做什么?通常,您希望有一个作为函数的道具。然后,呈现组件的处理程序将调用此函数。所以状态被设置,props函数被调用,处理程序执行业务逻辑,然后重新呈现组件。我在这里看到的是,您只需设置没有副作用的状态。在setState的更新完成之前,您正在分解this.state。请记住,setState是异步的。loadEvents是一个Redux操作,它调用数据库端点并检索事件列表。我已将按钮移动到presentational组件,并通过props调用onClickHandler,状态已更改,但页面未呈现新项目。这似乎是合理的,但当我实施此修复时,页面仍未呈现,当状态已更改时。@Rogier对setState的调用将导致重新呈现,除非您在shouldComponentUpdate中明确禁用它。除此之外,您应该查看loadEvents函数并找到罪魁祸首。这似乎是合理的,但当我实施此修复程序时,页面仍然没有呈现,而状态已更改。@Rogier对setState的调用将导致重新呈现,除非您在shouldComponentUpdate中显式禁用它。除此之外,您应该查看loadEvents函数并找到罪魁祸首。