今天写项目的时候遇到了一个比较经典的问题,splice删除数组中的某个元素后,调用setState,但是页面并没有刷新。
记录一下:
removeEntities = (entities) => {
const { arr } = this.state;
arr.map((item, index) => {
if (item === entities) {
arr.splice(index, 1);
this.setState({
arr: arr,
}); console.log(arr) //这里打印发现arr已经发生了变化,但是setState在页面上数据却不改变是不是很奇怪呢?
}
});
};
原因: arr是浅拷贝this.state.arr,因此,arr进行splice,就是this.state.arr进行splice,之后进行serState的时候,react发现,arr就是原来的那个arr(内存地址相同),因此,他就默认arr没有改变,于是就不更新页面。
参考:
https://www.cnblogs.com/seemoon/p/12975278.htmlreact 数组删除某一项更新setState无效的问题,react js怎么删除数组某一项,splice删除了某一项页面数据却不变 - 月亮出来了 - 博客园