web-dev-qa-db-ja.com

Immutable.jsがMap.setIn()で無効なキーパスをスローする理由

Docs 以下のコードが問題なく機能するかのように理解できるため、ここに何か欠落している必要がありますが、無効なキーパスエラーが発生します... this codepen を確認してください。

var map1 = Immutable.Map({ 'selector': { 'type': 'bar' }});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map2.toJS());
19
hally9k

これは、キー_'selector'_にマップ以外の値が含まれているために発生します。 _'selector'_の値も不変マップであることを確認すると、setInが機能します。

_var map1 = Immutable.Map({ 'selector': Immutable.Map({ 'type': 'bar' })});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map1.toJS());  
console.log(map2.toJS());_
_<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>_

JavaScriptオブジェクトと配列をマップとリストに深く変換するには、 fromJS() を使用できます。したがって、より簡単に書くことができます:

_var map3 = Immutable.fromJS({ 'selector': { 'type': 'bar' }});
var map4 = map3.setIn(['selector', 'type'], 'foo');
console.log(map3.toJS());  
console.log(map4.toJS());_
_<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>_
33
1983