问题:
当我使用 this.setState 并在回调中输出状态时,它根本不会改变,但是当我将 setstate 嵌套在 setstate 中时,它将正常工作。
例子:
这不行——
this.setState({
data: newData
});
这确实有效 -
this.setState({
data: newData
}, () => {
this.setState({
data: newData
});
});
这与批处理状态更新的反应方式有关系吗?
这是实际的代码,其中 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。