В ImmutableJS, как нажимать новый массив на карту?

Как я могу добиться следующего использования ImmutableJS:

myMap.get(key).push(newData);

Ответ 1

Вы можете сделать следующее: (см. JSBin)

const myMap = Immutable.fromJS({
  nested: {
    someKey: ['hello', 'world'],
  },
});

const myNewMap = myMap.updateIn(['nested', 'someKey'], arr => arr.push('bye'));

console.log(myNewMap.toJS());
// {
//  nested: {
//    someKey: ["hello", "world", "bye"]
//  }
// }

Так как myMap является неизменным, всякий раз, когда вы пытаетесь установить/обновить/удалить некоторые данные внутри него, он вернет ссылку на новые данные. Таким образом, вам нужно будет установить его для переменной, чтобы получить к ней доступ (в данном случае myNewMap).

Ответ 2

Если массив, на который ссылается ключ, представляет собой простой массив javascript - тогда вы действительно будете мутировать это значение, поэтому ваш код будет работать как ожидалось (т.е. myMap будет содержать изменяемый/мутированный массив в "ключе" с новым нажатием кнопки newData in.) Однако этот вид побеждает цель неизменности, поэтому я бы рекомендовал, чтобы ключ в myMap ссылался на Immutable.List. В этом случае вы захотите сделать:

var newMap = myMap.set('key', myMap.get('key').push(newData))