Как добавить новую пару ключ / значение во вложенную карту с помощью Immutable.js

#javascript #reactjs #react-redux #immutable.js

#javascript #reactjs #реагирование-уменьшение #immutable.js

Вопрос:

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

Я думал, что mergeDeepIn() должен сработать, но я получаю сообщение об ошибке «недопустимый путь к ключу».

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

 {
   "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:

Неизменность — это свойство структуры данных и означает: после создания этой структуры данных она больше никогда не изменится. Добавление или замена значения из / в a 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