调度操作后,应用程序状态立即更改

时间:2017-10-17 03:28:22

标签: javascript reactjs redux react-redux

我正在尝试使用setState更改状态,然后使用新状态调用操作,但React会在设置新状态之前调度操作。我如何等待新状态然后发送动作?

addressInput = e => {
  this.setState({
    address: e.target.value
  });
  this.props.filterSearch(this.state.address) //this will be called before state is set                              
}

1 个答案:

答案 0 :(得分:3)

this.setState提供回调作为第二个参数,在发生状态更改后调用该参数。您应该按如下方式使用回调

addressInput = e => {
  this.setState({
    address: e.target.value
  },
  this.props.filterSearch(this.state.address));
}

来自docs

  

setState()并不总是立即更新组件。它可以批量推迟更新或推迟更新。这使得在调用setState()之后立即读取this.state是一个潜在的陷阱。相反,使用componentDidUpdate或setState回调(setState(更新程序,回调)),其中任何一个都保证在应用更新后触发。