我需要在我的代码中设置一个状态,但由于setState()不会立即改变this.state,我试图在回调中执行此操作。但无法弄清楚它的正确语法。下面是代码。用户按下按钮后,将调用update()
方法。有以下两种状态:this.state.tmp
和this.state.rec
。 this.state.rec
是一张MAP,它是this.props.rec
的副本。我需要比较this.state.rec
和this.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);
....
}
答案 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,
}
})
请让我知道它对您有用