Как добавить элементы списка в качестве ключей к объекту в Redux? - PullRequest
0 голосов
/ 15 октября 2019

Я использую Redux с Reactjs.

В соответствии с документацией Redux :

возвращать новые объекты состояния вместо изменения предыдущего состояния.

У меня естьобъект с его текущим состоянием как:

state = [..., {id: 6, details: []}, ..., ...]

, и у меня есть массив ключей (все строки и уникальные), как это:

list: ["A", "B", "C"]

В javascript, если мне нравитсяэто:

for (const key of list) {
  exampleDetails[key] = null
} 

Я получаю желаемый результат:

exampleDetails // ["A": null, "B": null, "C": null]
exampleDetails["A"] // null <= what I actually need

Но как получить это следующее состояние путем редукции, то есть без мутации?

switch(state = [], action) {
  case 'MY_ACTION':
    return state.map(obj => {
      if (obj.id === action.id) {
        return {
          id: obj.id,
          details: [
            ...obj.details,
            /* what to do here? where list is => action.list */
          ]
        }
      } else return obj
    })
  default:
    return state
}

РЕДАКТИРОВАТЬ

Я не хотел сказать, что я что-то писал в коде:

["A": null, "B": null, "C": null]

Вот что я получаю в качестве вывода в консоли браузера:

enter image description here

1 Ответ

1 голос
/ 15 октября 2019

РЕДАКТИРОВАТЬ

switch(state = [], action) {
  case 'MY_ACTION':
    return state.map(obj => 
      (obj.id === action.id ? {...obj, details: action.list.reduce((acc, element) => { acc[element] = null; return acc; }, {}) } : obj)
    )
  default:
    return state
}

Я думаю, что вы смешиваете понятие между массивом и объектом. То, что вы пытаетесь достичь, это объект с элементом списка в качестве ключа.

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