Как обновить определенные ключевые значения в объекте, вложенном в состояние redux - PullRequest
0 голосов
/ 12 июля 2020

У меня есть следующие данные:

Project : {id:10,
           requirements: [{id:1,
                           title:test},
                          {id:2,
                            title:test2}]
          }

и

action.payload : {id:1,
                  title:changed_title}

What i wi sh для обновления объекта требований id:1 в моем редукторе redux.

Вот что у меня есть, но похоже, что он не работает и очень грязный:

  case 'requirements_update': return (updateObject(state, project: {...state.project , requirements: state.project.requirements.filter(requirement => 
                                                                                                                                            {if(requirement.requirement_id === action.payload.requirement_id)
                                                                                                                                                
                                                                                                                                            return(action.payload) }
                                                                                                                                            })}))

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Двойное распределение внизу предназначено для объединения текущих свойств требований с полезной нагрузкой действия (свойства полезной нагрузки действия будут иметь приоритет, поскольку они будут переопределять существующие)

case 'requirements_update':
  return {...state, state.project: {...state.project , requirements: state.project.requirements.map(requirement => {
    if (requirement.id === action.payload.id) {
      return {...requirement, ...action.payload}
    } else {
      return requirement
    }
  }}}
0 голосов
/ 12 июля 2020

Вы можете использовать проверку карты и идентификатора для обновления проекта

project : state.project.map(project => project.id === payload.id ? payload : project)
...