Распространение обновленных значений в объект удаляет свойство, которое не изменяется - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над редуктором в Redux, и при попытке обновить объект путем распространения как предыдущих, так и обновленных объектов на новый, свойство, которое не обновляется, стирается.

Код будетОбъясните это лучше:

Предыдущий объект:

previousObj: {
    name: 'Foo',
    category: 'Bar',
    projects: [{...}, {...}]
}

Обновление объекта:

updateObj: {
    name: 'Not Foo',
    category: 'Not Bar'
}

Затем распространение обоих на новый:

return {
    ...previousObj,
    ...updateObj
}

Результат совпадает с updateObj, что означает, что свойство "projects", в котором было еще несколько объектов, пропало.В моем понимании, при распространении двух объектов в новый, последние свойства будут перезаписывать предыдущие, если они имеют одно и то же имя, но нетронутые должны оставаться нетронутыми.

Я что-то здесь упускаю?

Просто для ясности, вот снимок фактического кода:

Actual code

Журнал в строке 12 имеет ту же форму, что иpreviousObj, и тот, что в строке 13, имеет ту же форму, что и updateObj, просто фактические значения были изменены для простоты.В результате я больше не могу получить доступ к «проектам» после обновления.

Любые мысли будут высоко оценены!

1 Ответ

0 голосов
/ 10 декабря 2018

Я предполагаю, что ваш код будет заканчиваться примерно так:

Я могу подумать, что ваш spread object создается правильно, вы пытались присвоить этот объект переменной, а затем вернуть его?Цель этого состоит в том, что вы проверяете, что правильный ключ / значения создаются.

const previousObj = {
  name: 'Foo',
  category: 'Bar',
  projects: [{
    t: 'test1'
  }, {
    t: 'test2'
  }]
}

const updatedObj = {
  name: 'not Foo',
  category: 'not Bar'
}

const newObj = { 
  ...previousObj,
  ...updatedObj
}

console.log(newObj)

Также я могу предположить, что ваш updatedObj поврежден и, следовательно, у вас есть проблема с вашим распространяемым объектом, проверьте, что updatedObj не назначает что-то для клавиши projects, как пример ниже.

const previousObj = {
  name: 'Foo',
  category: 'Bar',
  projects: [{
    t: 'test1'
  }, {
    t: 'test2'
  }]
}

const updatedObj = {
  name: 'not Foo',
  category: 'not Bar',
  projects: undefined
}

const newObj = { 
  ...previousObj,
  ...updatedObj
}

console.log(newObj)

и последним будет то, что где-то после того, как вы возвращаете распространяемый объект (который будет завершен), вы удаляете или переопределяете ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...