In alternativa alla wrap-chain-unwrap modello (nulla di intrinsecamente sbagliato con esso, ma le alternative sono sempre interessante) c'è un altro modo per controllare.
Provate facendo leva su _.flow
.
L'idea è che ogni funzione all'interno di flow
riceverà come input l'output del precedente, che è esattamente quello che ti serve. Un esempio, dato questi dati:
var foundUser = {
charData: []
};
var rows = [{ok: 1, blah: 'nope'}];
Usando Lodash FP
possiamo passare i dati come ultimo argomento. Questa caratteristica insieme alla auto-curring di ogni metodo in Lodash/fp semplifica la vita durante la composizione di funzioni.Questo significa che possiamo avere questo codice succinta ed espressivo:
_.flow(
_.assign(rows[0]),
_.omit('blah')
)(foundUser);
// >> {"charData":[],"ok": 1}
Utilizzando la versione standard di Lodash dobbiamo curry quelle funzioni a noi stessi che utilizzano _.partial
, e il codice sarà certamente guardare meno laconico, ma è ancora possibile fare così:
_.flow(
_.partialRight(_.assign, rows[0]),
_.partialRight(_.omit, 'blah')
)(foundUser);
// >> {"charData":[],"ok": 1}
Un grande vantaggio di utilizzare il flusso piuttosto che concatenamento è che si può facilmente mescolare metodi Lodash con le proprie funzioni personalizzate, dal momento che - come detto - tutti hanno bisogno è ju Dati st come input e dati come output, e nient'altro:
const yourFunction = d => ({ ...d, yourProp: 4 });
_.flow(
_.assign(rows[0]),
yourFunction,
_.omit('blah')
)(foundUser);
// >> {"charData":[],"ok": 1, yourProp: 4}
Questo rende composizione funzione molto più semplice e più flessibile e forse naturalmente portare a codice più espressivo.
Un'altra cosa da notare. Se si stanno installando e importando solo i metodi Lodash che si utilizzano, sarà necessario aggiungere solo il pacchetto flow
e non l'intera libreria di Lodash come si farebbe con il concatenamento.
npm i --save lodash.flow
Vs
npm i --save lodash
Forse un vantaggio trascurabile in molte applicazioni del mondo reale in cui avere il pieno build di Lodash non è un problema e probabilmente più facile da mantenere fino ad oggi, ma molto utile nel caso in cui stai scrivendo una libreria o uno script che verrà distribuito per utilizzarlo come strumento di terze parti. In tal caso sarai in grado di mantenere il tuo ingombro molto più basso in termini di dimensioni distribuite.
Metodi Lodash docs:
Due articoli pena di verificare:
NB - il titolo del secondo articolo è un po 'dura, a mio parere, ma non saltare, il contenuto è davvero molto istruttiva.
Poche altre cose da notare:
In Lodash/fp flusso è alias come _.pipe
, in modo da poter scegliere quello che preferite.
È anche possibile utilizzare _.flowRight
(o il suo alias fp
_.compose
), se si preferisce diritto di composizione sinistra, come si vede in Ramda's compose.
Esempio:
_.flow(
_.assign(rows[0]), // #1st to execute
yourFunction, // #2
_.omit('blah'), // #3
)(foundUser);
// is the same as...
_.flowRight(
_.omit('blah'), // #3rd to execute
yourFunction, // #2
_.assign(rows[0]), // #1
)(foundUser);
https://lodash.com/docs#_ – zerkms
https://lodash.com/docs#chain –