2016-05-09 38 views
11

Sto creando un'app con Redux e sto grattando la testa sul motivo per cui è meglio posizionare azioni e riduttori in file separati. Almeno, questa è l'impressione che ottengo da tutti gli esempi.Redux: Perché non inserire azioni e riduttore nello stesso file?

Ogni azione, o creatore di azioni, sembra mappare a una singola funzione che viene chiamata da un riduttore (all'interno di un'istruzione switch). Non sarebbe logico tenerli insieme nello stesso file? Rende inoltre più semplice l'utilizzo della stessa costante per il tipo di azione e di switch case, in quanto non deve essere esportato/importato tra i file.

+3

Pertinente: https://github.com/erikras/ducks-modular-redux – zerkms

risposta

12

Da Redux creatore Dan Abramov:

Molti riduttori possono gestire una sola azione. Un riduttore può gestire molte azioni . Mettendoli insieme si annullano molti vantaggi di come Flux e ridimensionano la scala dell'applicazione. Questo porta a un codice gonfiato e all'accoppiamento non necessario . Perdi la flessibilità di reagire alla stessa azione da luoghi diversi e i tuoi creatori di azioni iniziano a comportarsi come "setter", accoppiati a una forma di stato specifica, quindi accoppiano anche i componenti .

Dal Redux docs:

Si raccomanda di scrivere funzioni riduttore piccoli indipendenti che sono ogni responsabile per gli aggiornamenti di una fetta specifica di stato. Chiamiamo questo modello "composizione del riduttore". Una determinata azione potrebbe essere gestita da tutti, alcuni o nessuno di essi. Ciò mantiene i componenti disaccoppiati dalle effettive modifiche dei dati di , in quanto un'azione può interessare diverse parti dell'albero di stato e non è necessario che il componente ne sia a conoscenza.

Vedere this conversation on twitter e this issue on github per ulteriori informazioni.

+0

"Molti riduttori possono gestire un'azione." ha risposto alla mia domanda Grazie. Ma non riesco a pensare a una situazione in cui un'azione sarebbe gestita da più di un riduttore. –

+3

Immagina di far parte di un team che lavora su un'app per la gestione di un aeroporto. Sei responsabile della creazione della parte dell'app che gestisce i messaggi di stato dei voli. Un altro sviluppatore sta lavorando su una parte diversa dell'app, che gestisce la pianificazione di decolli e atterraggi sulle piste. Queste due parti dell'app sono gestite da rami completamente diversi dello stato di Redux, con diversi riduttori. Sia tu che l'altro sviluppatore scrivete riduttori che devono rispondere alle azioni FLIGHT_CANCELLED per la vostra particolare parte dell'app, anche se nessuno di voi è a conoscenza di ciò che l'altro sta facendo. –

+1

Ahh okay! Ora ha senso. Quindi diresti che è un po 'come il modello pub-sub? –

Problemi correlati