Reactjs setState()不会立即改变this.state,我应该如何修复它?

时间:2017-12-08 13:55:52

标签: javascript reactjs

我需要在我的代码中设置一个状态,但由于setState()不会立即改变this.state,我试图在回调中执行此操作。但无法弄清楚它的正确语法。下面是代码。用户按下按钮后,将调用update()方法。有以下两种状态:this.state.tmpthis.state.recthis.state.rec是一张MAP,它是this.props.rec的副本。我需要比较this.state.recthis.props.rec的新值(称之为patch)并运行api调用。

this.state.rec应该进行更改:在第2行,首先创建rec。它从this.state.tmp获取新值,然后我需要使用此新值更新this.state.rec。但显然updated没有像现在那样获得价值。有人可以告诉我如何解决它吗?

update(event)
{
    event.preventDefault();
    const rec = this.state.rec.set('something', this.state.tmp);
    let updated = this.setState({rec}, () => {
            return this.state.rec.toJS();
    });
    console.log("updated = ", updated)
    const original = this.props.rec.get('data').toJS();
    const patch = compare(original, updated);
    ....
}

2 个答案:

答案 0 :(得分:1)

setState(updater[, callback])接受callback function作为第二个参数,然而,在componentWillUpdate(nextProps, nextState)内对next和/或previous state进行比较或componentDidUpdate(prevProps, prevState)似乎更适合您的用例。

答案 1 :(得分:0)

使用类似的东西

    this.setState(function(state, props) {
    //You can write your logic here to decide to
    //make api call or not.
    return {
    newValue : state.newValue + 1,
    newAttribute: state.newAttribute - 1,
    newValueFromProps: props.newValue,
    }
})

请让我知道它对您有用