web-dev-qa-db-ja.com

ImmutableJSでは、新しい配列をマップにプッシュする方法を教えてください。

ImmutableJSを使用して次のことを実現するにはどうすればよいですか。

myMap.get(key).Push(newData);

15
Chopper Lee

次のように実行できます(これを参照してください JSBin

const myMap = Immutable.fromJS({
  nested: {
    someKey: ['hello', 'world'],
  },
});

const myNewMap = myMap.updateIn(['nested', 'someKey'], arr => arr.Push('bye'));

console.log(myNewMap.toJS());
// {
//  nested: {
//    someKey: ["hello", "world", "bye"]
//  }
// }

myMapは不変であるため、その中のデータを設定、更新、削除しようとすると、新しいデータへの参照が返されます。したがって、それにアクセスするには、変数に設定する必要があります(この場合はmyNewMap)。

35
Brian Park

キーで参照される配列がプレーンなJavaScript配列である場合-実際にその値を変更します-そのため、コードは期待どおりに機能します(つまり、myMapには、 'key'に変更可能/変更された配列が含まれ、newDataがプッシュされます。)ただし、これは不変性の目的に反するため、myMapのキーがImmutable.Listを参照することをお勧めします。その場合は、次のようにします。

var newMap = myMap.set('key', myMap.get('key').Push(newData))
7