反应:为什么我们在setState中有回调?

时间:2019-12-13 07:28:37

标签: reactjs

为什么我们在setState中有一个回调?

我是新来的反应者,我试图理解,但我无法完全理解。

3 个答案:

答案 0 :(得分:1)

increasePrice = () => {
    this.setState({
        price: this.state.price + 1
    })
    this.props.getPriceData(this.state.price)
}

setstate是一个异步进程;未更新 例如,如果要在修改后传递数据,则需要使用以下回调函数

increasePrice = () => {
    this.setState({
        price: this.state.price + 1
    },()=>{
   this.props.getPriceData(this.state.price)
})}

答案 1 :(得分:1)

如文档中所述: https://reactjs.org/docs/react-component.html#setstate

  

setState()并不总是立即更新组件。它可能会批量更新或将更新推迟到以后。这使得在调用setState()之后立即读取this.state可能是一个陷阱。而是使用componentDidUpdate或setState回调(setState(updater,callback)),确保在应用更新后均能触发这两种方法。如果需要基于先前的状态来设置状态,请阅读以下有关updater参数的信息。

永远不要直接修改状态对象,而应使用setState()提供的更新程序功能:

// Bad
this.state.counter = this.state.counter + this.props.step;

// Good
this.setState((state, props) => {
  return {
    counter: state.counter + props.step
  };
});

答案 2 :(得分:0)

setState本质上是异步的。如果要在设置后立即使用更新的状态,则使用状态回调。

示例-

setState(
  { name: "ABC" },
  () => console.log(this.state)
);
// => { name: "ABC" }

阅读此SO帖子以了解何时使用它。