React - Updating state (array of objects). Do I need to deep copy the array?(Reaction-更新状态(对象数组)。我是否需要深入复制阵列?)
本文介绍了Reaction-更新状态(对象数组)。我是否需要深入复制阵列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下state
:
const[images,setImages] = useState([
{src: 'stringSRC1', selected: false},
{src: 'stringSRC2', selected: false},
{src: 'stringSRC3', selected: false}
]);
我正在使用以下代码更新它(切换选定状态):
function handleImageClick(index) {
props.setImages((prevState)=>{
const aux = Array.from(prevState);
aux[index].selected = !aux[index].selected;
return aux;
});
}
它按预期工作。但是我想到了一件事。
当我从prevState
复制数组时,我创建了一个新数组,但对象(存储为引用)将保持不变。我已测试过,以这种方式复制数组时它们不会更改。
问题
这是不是一种糟糕的做法?我是否应该像创建新数组和创建全新对象那样,费心深入复制数组呢?还是这样就好了?
推荐答案
不,它应该是这样工作的。是的,对象没有改变,但这里重要的是数组改变了。到目前为止,当情况发生变化时,Reaction在DOM和虚拟DOM之间执行浅显的比较。一旦将新数组与旧数组进行比较,就会检测到更改,数组本身的内容实际上并不重要。
这篇关于Reaction-更新状态(对象数组)。我是否需要深入复制阵列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Reaction-更新状态(对象数组)。我是否需要深入复制阵列?
基础教程推荐
猜你喜欢
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 动态更新多个选择框 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 响应更改 div 大小保持纵横比 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01