元素被状态值覆盖

时间:2021-03-05 01:16:17

标签: javascript react-native

我正在尝试使用 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")
            }

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是将对象视为不可变的(意味着无法更改其属性)。

您可以创建视频对象的浅拷贝,而不是分配给 viewstestVideos[i] 属性,并设置新值:

testVideos[i] = {
  ...testVideos,
  views: dic[j].views,
}

在分配 testVideos 时,您还需要创建数组的副本。

const testVideos = this.state.data