【发布时间】:2020-10-10 23:13:24
【问题描述】:
我在我的 react 应用程序中克隆数组时遇到问题。
我将一个包含数据的数组导入到名为 ApplicationsData 的应用程序中。它是一个对象数组。
import ApplicationsData from '../Store/Applications';
App 组件具有以下状态:
constructor(props) {
super(props);
this.state = {
isOn: true,
untouchedApplications: [...ApplicationsData],
applications: [...ApplicationsData],
activeWindows: [...defaultActive],
background: "#3a6ea5"
};
}
我使用“...”扩展运算符克隆了包含数据的数组。
在我的上下文中,我有一个方法 - openApp - 它会更改 state.applications 中元素的属性。
openApp: (appID) => {
let appIndex = this.state.applications.findIndex( el => el.id == appID);
let clone = [...ApplicationsData];
clone[appIndex].isActive = true;
clone[appIndex].newProp = true;
clone[appIndex].isMinimized = false;
this.setState({applications: clone})
},
每当我到达clone[appIndex].prop = value 时,state.applications 和 untouchedApplications 都会被该数据覆盖,尽管在 state 和 openApp 中都使用了扩展运算符。状态中的 untouchedApplications 数组不会在应用程序或方法中的任何地方使用,但也会被更新。此外,分配给克隆数组的 newProp 属性不存在于带有数据的原始数组中,但在将其添加到克隆数组后,确实会应用于两个数组。
我也尝试过使用Array.from 和state.applications.slice() 来创建克隆。我感觉有点迷茫,因为我确信这是克隆数组的正确方法。
对于混乱的代码缩进,我深表歉意。我不知道如何正确格式化它。第一行在其他行之前,或者所有行都以 8 个制表符开头。任何提示都值得赞赏。
【问题讨论】:
标签: arrays reactjs ecmascript-6 spread-syntax use-context