Почему моя попытка клонировать объект не работает, как ожидалось? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь клонировать объект props.messages.serverError; Я попробовал следующие три метода по отдельности:

 1. let serverError= {...props.messages.serverError};
 2. let serverError = Object.assign({}, props.messages.serverError);
 3. let serverError= JSON.parse(JSON.stringify(props.messages.serverError}));

После клонирования объекта я установил для исходного объекта значение null, а затем зарегистрировал клонированный объект a следующим образом:

props.messages.serverError = null;
console.log('serverError', serverError)

serverError также равен нулю вместо исходного значения, хотя теперь предполагается, что он занимает адрес памяти, отличный от исходного объекта из-за клонирования.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Я дважды клонировал объект, и он, кажется, работает:

let originalError = {...props.messages.serverError};
let serverError = {...originalError};
originalError = null;
props.messages.serverError = null;
console.log('serverError', serverError)

Здесь serverError теперь имеет исходное значение.

0 голосов
/ 21 января 2020

Я удивлен, как вы можете установить значение для props? Props только для чтения. Вы изменяете это значение напрямую, без какого-либо взаимодействия react, может быть, поэтому оно меняет фактическое значение Вы можете попробовать что-то вроде этого.

let props = {
  messages: {
    serverError: 404
  }
}

let serverError = { ...props.messages };
console.log("Initial Value", serverError.serverError);

props.messages.serverError = 500;
console.log("After Update: (Props)", props.messages.serverError);
console.log("After Update:", serverError.serverError);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...