У меня проблемы с клонированием массивов в моем приложении реакции.
Я импортирую массив с данными в свое приложение под названием ApplicationsData. Это массив объектов.
import ApplicationsData from '../Store/Applications';
Компонент приложения имеет следующее состояние:
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 переопределяется этими данными, несмотря на использование операторов распространения как в состоянии, так и в openApp. Массив untouchedApplications в состоянии не используется нигде в приложении или методе, но также обновляется. Кроме того, свойство newProp, назначенное клонированному массиву, отсутствует в исходном массиве с данными, но применяется к обоим массивам в состоянии после добавления его в клонированный массив.
Я также пробовал использовать Array.from
и state.applications.slice()
для создания клонов. Я чувствую себя здесь немного потерянным, так как был уверен, что это правильный способ клонирования массивов.
Прошу прощения за беспорядочные отступы в коде. Я понятия не имею, как правильно его отформатировать. Либо первая строка идет впереди других строк, либо все строки начинаются с 8 табуляций. Любые советы по этому поводу также приветствуются.