Immutablejs — карта, не делающая вложенные объекты неизменяемыми

#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, чтобы продемонстрировать проблему.