Frage Wie verschiebt man in ImmutableJS ein neues Array in eine Map?


Wie kann ich mit ImmutableJS folgendes erreichen:

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


15
2017-07-27 09:01


Ursprung


Antworten:


Sie können wie folgt vorgehen: (Siehe hierzu 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"]
//  }
// }

Schon seit myMap ist unveränderlich, wenn Sie versuchen, einige Daten darin einzustellen / zu aktualisieren / zu löschen, wird es eine Referenz auf die neuen Daten zurückgeben. Also, Sie müssten es auf eine Variable setzen, um darauf zugreifen zu können (in diesem Fall myNewMap).


35
2017-08-11 03:03



Wenn das Array, auf das am Schlüssel verwiesen wird, ein einfaches JavaScript-Array ist, dann mutieren Sie diesen Wert tatsächlich, so dass Ihr Code wie erwartet funktioniert (dh myMap wird ein veränderbares / mutiertes Array bei 'key' enthalten, in das die newData eingefügt wird.) Allerdings, diese Art von vereitelt den Zweck der Unveränderlichkeit, so würde ich empfehlen, dass der Schlüssel in myMap eine Immutable.List verweisen. In diesem Fall sollten Sie Folgendes tun:

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

7
2017-07-29 17:39