我正在尝试使用 testVideos 中的数据值,但由于它是 this.state.data,因此当我对 testVideos 进行更改时,它会覆盖我的 this.state.data 值。
如何使 testVideos 独立但使用来自 this.state.data 的数据,这样 this.state.data 不会得到与 testVideos 相同的结果?
try {
if (dic.length == 99) {
for (i in dic2) {
dic.push(dic2[i])
}
//HERE IS WHERE THE OVERWRITE OCCURS
const testVideos = this.state.data
for (const i in testVideos) {
for(const j in dic) {
if (testVideos[i].snippet.resourceId.videoId == dic[j].id) {
testVideos[i].views = dic[j].views
}
}
}
//NOW this.state.data HAS THE SAME VALUE AS testVideos
//testVideos and this.state.data should have different values
this.setState({
videosWithViews: testVideos.slice(0,10),
videoIdDuplicate: true
})
}
} catch(err) {
console.log("catch")
}
答案 0 :(得分:0)
解决此问题的一种方法是将对象视为不可变的(意味着无法更改其属性)。
您可以创建视频对象的浅拷贝,而不是分配给 views
的 testVideos[i]
属性,并设置新值:
testVideos[i] = {
...testVideos,
views: dic[j].views,
}
在分配 testVideos 时,您还需要创建数组的副本。
const testVideos = this.state.data