Ответ 1
В этом примере
var a = {address: {postcode: 5085}}
var d = Immutable.Map(a);
Здесь d.get('address')
является неизменным. Это значение не может измениться на любые другие объекты. Мы можем только создать новый объект из существующего объекта с помощью функции Immutable.Map.set()
ImmutableJS.
Но объект , на который ссылается d.get('address')
i.e, {postcode:5085}
, является стандартным объектом JavaScript. Он изменен. Подобное утверждение может изменить значение postcode
:
d.get('address').postcode=6000;
Если вы снова проверите значение d, вы увидите, что он был изменен.
console.log(JSON.stringify(d)); //Outputs {"address":{"postcode":6000}}
что противоречит принципам неизменности.
Причина в том, что структуры данных ImmutableJS, такие как List
и Map
, придают функции неизменности только элементам уровня 1 List
/Map
.
Итак, , если у вас есть объекты внутри массивов или массивов внутри объектов и хотите, чтобы они тоже были неизменными, ваш выбор Immutable.fromJS
.
var a = {address: {postcode: 5085}}
var b = Immutable.fromJS(a);
b.get('address').postcode=6000;
console.log(JSON.stringify(b)); //Outputs {"address":{"postcode":5085}}
Из приведенного выше примера вы можете четко знать, как fromJS
делает вложенные члены неизменяемыми.
Надеюсь, вы поняли разницу между Map
и fromJS
. Все самое лучшее =)