update sort seamless react immutable delete immutable.js

immutable.js - sort - seamless immutable



¿Cómo establecer múltiples campos a la vez en Immutable.js Record? (4)

Mirando this , creo que es inmutable. El registro es la estructura de datos para representar "objetos inmutables de javascript", pero quiero actualizar varios campos a la vez sin crear varios objetos llamando cada vez.

Quiero hacer algo como esto

class LoginContext extends Immutable.Record( { logged : false, loading: false, error: false, user: null}){ } var loginContext = new LoginContext() var anotherContext = loginContext.set({''logged'':''true'', ''error'':''false''})

read que no puede pasar un objeto a Record.set () por coherencia API:

Coherencia con otros usos de set tanto en esta biblioteca como en ES6. El conjunto de mapas y conjuntos no puede aceptar un objeto, porque sus claves pueden ser cualquier cosa, no solo cadenas. Los registros deben tener cadenas, pero era importante mantener la API consistente.

Y sé que podría usar:

var anotherContext = loginContext.withMutations(function (record) { record.set(''logged'',''true'').set(''error'',''true''); });

Hay otra manera o estoy haciendo un mal uso de Record?


¿Por qué no simplemente encadenar conjuntos múltiples? Al igual que:

ImmutableObj.set(''key'', ''value'') .set(''key2'', ''value2'') .set(''key3'', ''value3'');


Deberías hacer algunas cosas de manera diferente. Primero, no extiendas Immutable.Record pero usa el constructor:

var LoginContext = Immutable.Record({ logged:false, loading:false, user: null }, ''LoginContext'');

Esto devuelve una clase que puede instanciar con un objeto:

var anotherContext = new LoginContext({logged:true, error:false});


Para responder a su pregunta original, utilizaremos .withMutations()

Aquí un extracto de los documentos:

La aplicación de una mutación para crear un nuevo objeto inmutable genera algunos gastos generales, lo que puede sumar una penalización de rendimiento menor. Si necesita aplicar una serie de mutaciones localmente antes de regresar, Immutable le brinda la capacidad de crear una copia temporal mutable (transitoria) de una colección y aplicar un lote de mutaciones de manera eficaz mediante el uso de withMutations. De hecho, así es exactamente como Immutable aplica mutaciones complejas en sí.

Para que puedas escribir algo a lo largo de las líneas:

loginContext.withMutations((ctx) => { ctx.set(''logged'', true).set(''error'', false) });

Además de eso, pensé que los registros también podrían usarse con notación de puntos js ordinaria.

¡Buena suerte!


Personalmente prefiero la sintaxis de combinación, se siente más natural:

const newContent = oldContext.merge({ "logged": true, "error": false });

Si estuvieras haciendo algo muy complejo, tal vez la versión transitoria sería mejor, pero no puedo imaginar dónde.

También significa que puede aprovechar mergeDeep si es necesario.