#javascript #immutable.js
#javascript #immutable.js
Вопрос:
Я настраиваю карту следующим образом:
import { Map } from 'immutable';
const initialState = {
a: "test",
b: {
inside: "inside value"
}
}
const otherState = {
c: "other value"
}
const myState = new Map({ app: new Map(initialState).merge(otherState) });
Казалось, что это работает, однако, когда я пытаюсь изменить значения внутри вложенного объекта, похоже, у меня это не работает (я получаю «недопустимый ключевой путь»). Итак, попытка:
myState.setIn(['app', 'b', 'inside'], 'newValue');
выдает мне ошибку «недопустимый ключевой путь». Похоже, что при выходе из системы вложенный объект не становится неизменяемым. Не уверен, что я делаю неправильно.
Редактировать — вот codepen, чтобы показать проблему — https://codepen.io/ajmajma/pen/rRQoZp
Ответ №1:
По-видимому, правильный путь должен быть ['app', 'b', 'inside']
задан, который app
является единственным свойством myState
объекта.
Вам также нужны Immutable.fromJS()
ваши initialState
объекты и otherState
, иначе вложенные ключи обрабатываются как объекты JS, а не как карты immutablejs.
const myState = new Map({ app: new Map(Immutable.fromJS(initialState)).merge(Immutable.fromJS(otherState)) });
Комментарии:
1. Моя опечатка — извините! Я добавил codepen, чтобы продемонстрировать проблему.