React + immutable.js: объединить карту в список карт для обновления состояния - PullRequest
0 голосов
/ 27 августа 2018

Я пробую immutable.js в моем новом проекте React, но у меня отключение при добавлении карты в существующий список карт в моем состоянии.

Я бы ранее написал (используя массивы и объекты):

this.setState({
  objectsArray: [...this.state.objectsArray, newObject];
})

Но я изо всех сил пытаюсь найти правильный эквивалент с помощью immutable.js. Я пробовал что-то вроде этого, но безуспешно:

state.get('mapsList').merge(newMap);

Я нахожу множество примеров объединения веб-списков и карт в Интернете, но у меня есть список карт, и официальные документы по неизменяемым спискам точно не разработаны.

Ссылки на ресурсы и лучшие практики, связанные с операциями состояния React / Redux, также приветствуются, спасибо!

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

вам нужно обновить список с

state = state.updateIn(['mapsList'], function(list) { return list.push(newMap); })

, который обновит список mapsList с новой новой картой

0 голосов
/ 27 августа 2018

Ваш "старый" код создает новый массив с теми же объектами, которые уже существовали, плюс новый объект.

Насколько я понимаю, Immutable's List#push делает то же самое:

push()

Возвращает новый List с добавленным values, начиная с этого List size.

push(...values: Array<T>): List<T>

Итак:

this.setState(({mapsList}) => {
    return {mapsList: mapsList.push(newMap)};
});

Примечание: я использую версию обратного вызова setState, потому что вы не можете делать то, что делал ваш старый код. Если вы устанавливаете новое состояние на основе существующего состояния, вы должны использовать обратный вызов; подробности .

...