问题:当我使用 this.setState 并在回调中输出状态时,它根本不会改变,但是当我将 setstate 嵌套在 setstate 中时,它将正常工作。
示例:这不起作用 -
this.setState({
data: newData
});
这确实有效 -
this.setState({
data: newData
}, () => {
this.setState({
data: newData
});
});
这与react批次状态更新的方式有关吗?
这是实际代码,除非我嵌套它,否则 setstate 不起作用(我尝试在此函数中注释掉所有内容并使用 setState 将 coursePage 设置为 null,但除非嵌套,否则它不起作用):
cancelCPIndexChange(index){
let temp = this.state.coursePages;
this.hideEditingCoursePage(index);
let canceledIndex = temp[index];
temp = temp.slice(0, index).concat(temp.slice(index+1));
temp = temp.slice(0, parseInt(canceledIndex.course_pageindex)-1).concat(canceledIndex).concat(temp.slice(parseInt(canceledIndex.course_pageindex)-1));
this.setState({
coursePages: temp
}, () => {this.setState({
coursePages: temp
});
});
}
这是另一个与 cancelCPIndexChanges 处于同一级别的函数,它能够修改 coursePages 的状态:
showEditingCoursePage(index){
let temp = this.state.coursePages;
temp[index].editingCoursePage = true;
this.setState({
coursePages: temp
});
}
这些函数在 course.js 中。这两个函数都传递给 CoursePages.js,然后传递给 CoursePage.js。