#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