2015-05-07 20 views
11

Sto usando immutable.js con la mia applicazione di flusso. È molto utile e dà un incremento delle prestazioni. Ma ciò che in realtà mi rende triste è il fatto che non posso usare lodash insieme ad esso. Lodash offre una grande API con un sacco di funzioni utili, quindi mi chiedo forse c'è un modo per farli lavorare insieme per me?Un modo per usare immutable.js con lodash?

+2

Forse fornire un codice che si sta tentando di utilizzare che illustra _come_ le due librerie non funzionano insieme? –

+0

Non vedo come potrebbero funzionare insieme, poiché lodash gestisce gli array e gli oggetti javascript - immutable.js li sostituisce con i propri elenchi e mappe. – OlliM

+0

Puoi anche consultare https://github.com/engineforce/ImmutableAssign, che supporta l'immutabilità e ti consente di continuare a lavorare con POJO (Plain Old JavaScript Object). – engineforce

risposta

3

Ho recentemente scritto un wrapper Lodash fornendo Immutable.JS supporto chiamato mudash. La maggior parte delle principali funzioni di Lodash sono supportate e altre vengono aggiunte regolarmente.

6

Suppongo che tu stia cercando di fare qualcosa come fare una mappa di lodash su un set immutabile. Lodash non fa cose utili quando cerchi di farlo direttamente.

Nota che immutable.js ha già molte delle sue funzioni di manipolazione (come map) e il suo lazy chaining (via Seq), quindi dovresti esaminarle.

Se devi fare qualcosa che fornisce lodash e immutable.js, una cosa che puoi fare è prendere il tuo oggetto immutabile e convertirlo in un oggetto JS vanilla per il consumo da parte di lodash. Per esempio:

// Do all of your fancy immutable.js stuff... 
my_set = immutable.Set([1,2,3]).union(immutable.Set([2,3,4])) 
// ...and then convert to JS before you do all of your fancy lodash stuff 
mapped_set = _(my_set.toArray()).map(whatever) 

Avrete ovviamente devono prendere in considerazione le prestazioni qui, dal momento che si può finire con il peggiore dei due mondi se si converte da una all'altra copiando i dati in una vaniglia struttura dati. Nel caso del giocattolo sopra, ad esempio, probabilmente staresti meglio usando immutable.js map() direttamente.

+6

La conversione di materiale da JS e JS molte volte non è accettabile per il mio caso particolare. Comunque ho scoperto che immutable.js ha grandi API da solo e in molti casi sostituisce lodash. Comunque grazie per aver risposto –

+0

Posso attestare che l'uso costante altalenante di .fromJS() e .toJS() è molto costoso. Suggerirei di assumere che l'intero albero di stato sia incapsulato nell'API di Immutable.js o fare molta attenzione a come lo si intesse. –

5

È possibile utilizzare Ramda se si desidera l'immutabilità e le funzioni senza effetti collaterali.

La libreria fornisce funzioni utili simili a lodash ma in uno stile di programmazione funzionale che non muta mai i dati dell'utente.

Considerare this React example utilizzando la funzione della mappa nella sintassi Ramda ed ES6.

R.map(function, array); 
1

seamless-immutable mira a fornire un API che è compatibile con le strutture di dati vaniglia JS.

Ciò consente di utilizzare metodi lodash. Tuttavia, dal momento che molti dei metodi di lodash sono scritti pensando alla mutevolezza, probabilmente sono tutt'altro che ottimali.

1

Si consiglia di verificare https://github.com/engineforce/ImmutableAssign creato da me, che è un helper immutabile leggero, che supporta l'immutabilità e consente di continuare a lavorare con POJO (Plain Old JavaScript Object). Pertanto è possibile utilizzare qualsiasi funzione di lodash.

esempio

var iassign = require("immutable-assign"); 
var _ = require("lodash"); 

var o1 = { a: { c: 1 }, b: [1, 2, 3] }; 
var o2 = iassign(
    o1, 
    function(o) { return o.b; }, // get property to be updated 
    function(b) {     // update select property 
     return _.map(b, function(i) { return i + 1; }); 
    } 
); 


// o2 = { a: { c: 1 }, b: [2, 3, 4] } 
// o1 is not modified 

// o2 !== o1 
// o2.b !== o1.b 

// o2.a === o1.a 
1

Come si usa withMutations in ImmutableJS?

Ricerca Batching Mutations per breve spiegazione here.

Problemi correlati