调用this.setState
后,talents
属性仍然保留旧值:
onTalentModalCheckboxChange(e) {
debugger;
var talent = JSON.parse(e.target.dataset.talent);
talent.checked = !talent.checked;
if (this.maximumSelectedTalentsReached() && talent.checked) return;
const talentIndex = this.state.talents.findIndex(t => t.Id == talent.Id);
let updatedTalents = [...this.state.talents];
updatedTalents[talentIndex] = talent;
this.setState({ talents: updatedTalents });
// this method (setSearchResultsTotal) uses this.state.talents,
// but the talent that is updated here, is not updated.
// It still has the 'old' checked value
this.setSearchResultsTotal();
}
talents
属性包含一个Talent对象列表,这些对象都具有checked
属性。我的问题是,设置更新后的才能对象
我在这里想念什么?
答案 0 :(得分:2)
setState
是异步的,意味着更改不会立即发生。因此,在setState
调用完成之后,需要使用 调用任何使用状态的函数。有两种方法可以执行此操作:如果componentDidUpdate
与this.state.talents
不同,请使用prevState.talents
来触发函数。或者,使用setState
回调函数来调用该函数:
onTalentModalCheckboxChange(e) {
debugger;
var talent = JSON.parse(e.target.dataset.talent);
talent.checked = !talent.checked;
if (this.maximumSelectedTalentsReached() && talent.checked) return;
const talentIndex = this.state.talents.findIndex(t => t.Id == talent.Id);
let updatedTalents = [...this.state.talents];
updatedTalents[talentIndex] = talent;
// Only call this.setSearchResultsTotal after state has finished updating
this.setState({ talents: updatedTalents }, () => this.setSearchResultsTotal(); );
}
答案 1 :(得分:0)
this.setState({ talents: updatedTalents }, () => {
this.setSearchResultsTotal();
});
尝试像这样调用ur方法,它将起作用