Using async setState

前端 未结 5 2139
清歌不尽
清歌不尽 2020-11-28 04:42

I have function which dispatched an action. I would like to display a loader before and after the action. I know that react composing the object passed to setState

5条回答
  •  情书的邮戳
    2020-11-28 05:16

    Wrap the rest of your code in the callback of the first setState:

    handleChange(input) {
      this.setState({
        load: true
      }, () => {
        this.props.actions.getItemsFromThirtParty(input)
        this.setState({ load: false })
      })
    }
    

    With this, your load is guaranteed to be set to true before getItemsFromThirtParty is called and the load is set back to false.

    This assumes your getItemsFromThirtParty function is synchronous. If it isn't, turn it into a promise and then call the final setState within a chained then() method:

    handleChange(input) {
      this.setState({
        load: true
      }, () => {
        this.props.actions.getItemsFromThirtParty(input)
          .then(() => {
            this.setState({ load: false })
          })
      })
    }
    

提交回复
热议问题