如何在React组件中更新和返回状态

时间:2018-09-21 13:15:02

标签: javascript reactjs redux

在我的componentwillmount方法中,我需要初始化组件的状态,并且我想使用update&return new state而不是多次执行setState

我的代码现在是

componentWillMount() {
    this.setState(
        data1: doSomeCalculationAndReturnData1
    );
    //do other processX
    this.setState(
        data2: doSomeCalculationAndReturnData2
    );
    //do other processY
}

我想这样做,但是当我尝试第二种方法时它不起作用,请告知我

componentWillMount() {
    //do other processX
    //do other processY
    return {
        ...state,
        data1: doSomeCalculationAndReturnData1
        data2: doSomeCalculationAndReturnData2
    }
}

4 个答案:

答案 0 :(得分:1)

在最新的React版本(16.5.1)中,componentWillMount方法标记为已弃用。 “通常,我们建议使用构造函数()代替初始化状态”-引用官方文档。

但是,componentWillMount中的返回值不会影响任何更改,您应该将setState与参数一起使用,该参数包含两个属性data1和data2。

setState({
    data1: doSomeCalculationAndReturnData1,
    data2: doSomeCalculationAndReturnData2
})

答案 1 :(得分:1)

您可以简单地这样做

componentWillMount = () => {
    this.setState({
        data1: do_some_calculation_and_return_data_1,
        data2: do_some_calculation_and_return_data_2
    })
}

或者您可以使用constructor方法

答案 2 :(得分:0)

您可以按照以下方式设置状态。同样,您也不想散布现有状态,因为在这种情况下它是无用的操作。

componentWillMount() {
    const data1 = computedData1;
    const data2  = computedData2;
    this.setState({data1, data2});
}

答案 3 :(得分:-1)

在组件的constructor上执行此操作的最佳方法。您可以在此处初始化状态而无需调用setState

constructor(props) {
  super(props);

  //do other processX
  //do other processY

  this.state = {
    data1: doSomeCalculationAndReturnData1,
    data2: doSomeCalculationAndReturnData2
  };
}