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?
risposta
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.
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.
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 –
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. –
È 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);
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.
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
Come si usa withMutations in ImmutableJS?
Ricerca Batching Mutations
per breve spiegazione here.
- 1. lodash typescript: come dichiarare un dizionario da usare con _.map?
- 2. Posso usare il compito di destrutturazione con immutable.js?
- 3. C'è un modo per sostituire questo codice di lodash _.chain con javascript nei browser moderni?
- 4. Lodash: _.forOgni con funzione
- 5. Ricerca per ordine alfabetico immutable.js
- 6. Utilizzo dell'immutabile helper di React con Immutable.js
- 7. Lodash per Python?
- 8. Lodash per Ogni array associativo
- 9. C'è un modo semplice per usare InternalsVisibleToAttribute?
- 10. C'è un modo semplice per usare clang con Open MPI?
- 11. C'è un modo per usare Jenkins con Github Pull Requests?
- 12. C'è un modo per usare setOnClickListener con uno Spinner Android?
- 13. C'è un modo semplice per usare l'avvoltoio con django?
- 14. È un buon modo per usare java.util.concurrent.FutureTask?
- 15. Il modo migliore per rimuovere un elemento da una lista all'interno di una mappa in Immutable.js
- 16. Controllo statico dei tipi con flusso immutable.js e Facebook
- 17. Come valori nidificati Immutable.js
- 18. Parsing Records annidati in Immutable.js
- 19. Array di stringa con AngularJS e Lodash
- 20. lodash per "seleziona per percorso oggetto"?
- 21. Lodash _.debounce con code separate per varianti di argomenti univoci
- 22. Modo corretto per usare get_or_create?
- 23. Qual è la migliore implementazione di react shouldComponentUpdate con immutable.js
- 24. C'è un modo per usare @ Html.HiddenFor per il modello completo?
- 25. Un modo per usare la codifica Scala per iOS?
- 26. come usare lodash _ senza operatore con una matrice invece di più argomenti
- 27. Come si usa lodash con Ionic 2?
- 28. Come filtrare le chiavi di un oggetto con lodash?
- 29. come dichiarare una mappa contenente alcuni oggetti con flowtype & immutable.js
- 30. Object.assign vs lodash _.assign
Forse fornire un codice che si sta tentando di utilizzare che illustra _come_ le due librerie non funzionano insieme? –
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
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