Как добавить новую пару ключ / значение во вложенную карту с помощью Immutable.js - PullRequest
1 голос
/ 14 апреля 2019

Я хочу добавить новую пару ключ / значение на карту, которая вложена в другую карту.Если ключ уже существует, он должен быть заменен.

Я думал, mergeDeepIn () должно пойти на хитрость, но я получаю ошибку "invalid keyPath".

Состояние выглядит следующим образом:

{
   "requests":{
      "1":{
         "title":"I have a question",
         "customerId":2,
         "messages":{
            "222":{
               "text":"Hello!",
               "senderId":1,
            },
         },
        ...
      },
      ...
   },
}

«запросы» и «сообщения» являются неизменяемыми Картами.

Я пробовал это:

const message = fromJS({
  "5": {
    text: "test",
  },
})
state.mergeDeepIn(['requests', 1, 'messages'], message)

Сообщение должно быть добавлено на карту сообщений.

1 Ответ

1 голос
/ 14 апреля 2019

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

Что вы можете сделать, это создать новый Map из уже существующего.

const {Map} = require('immutable');
m = Map({a:1});

Map({...m.toJSON(), b:2}) // Map { "a": 1, "b": 2 }
Map({...m.toJSON(), a:2}) // Map { "a": 2 }
m.set('a', 2) // Map { "a": 2 } , creates a new map same as line above
...