2016-04-25 38 views
5

Come un principiante Redux, data (l'idea di) una domanda di un po 'più grande immagino un riduttore di radice simile a:Come si pulisce lo stato di Redux?

const rootReducer = combineReducers({ accounting, crm, sales }) 

stato di applicazione in questo caso conterrebbe la contabilità, CRM, e le vendite anche se l'utente è solo utilizzando una parte dell'applicazione. Ciò può essere vantaggioso, ad esempio come cache quando si passa avanti e indietro tra accounting e CRM, ma probabilmente non si desidera conservare tutti i dati di tutte le viste che sono mai state aperte, ovvero l'albero di stato completo possibile senza alcuna potatura, all'interno dell'applicazione per sempre o addirittura inizializzando l'intero albero al suo stato iniziale in fase di caricamento.

Ci sono idiomi, schemi o librerie che risolvono questo o mi manca qualcosa?

A parziale soluzione che risolve conservando tutti i dati immagino qualcosa come resettare parti dello stato allo stato iniziale quando si naviga lontano da certe parti dell'applicazione in alcune regole dichiarativa quali:

  • set accounting = {} (indirettamente, attraverso un'azione come ACCOUNTING_LEAVING) quando riceve <Accounting/>componentWillUnmount
  • delete/set crm.mail = {} quando <MailEditor/> riceve componentWillUnmount

Non ho visto esempi che ripuliscano lo stato in alcun modo. Molti esempi di "elenco + vista dettagli" memorizzano lo stato come { list: [...], detail: {...} }, ma quando si passa alla vista dettagli l'elenco non viene né svuotato, né annullato, né cancellato. Questo è bello quando potrei tornare alla visualizzazione elenco un paio di momenti dopo, ma non quando si utilizza un'applicazione da 9 a 5 senza mai rilasciare i dati.

risposta

4

Qualche considerazione correlati:

  • A meno che non vi aspettate decine o centinaia di megabyte di dati da memorizzare nella cache nel tuo negozio, probabilmente stai preoccuparsi di questo troppo presto. Scrivi la tua app, benchmark e quindi ottimizza.
  • Le azioni di spedizione per cancellare parti del negozio sono interamente valide e ragionevoli.
  • Il mio Redux addons ecosystem catalog potrebbe avere alcune librerie elencate che potrebbero essere utili. In particolare, le pagine Component State e Reducer puntano su alcune librerie che fanno cose come aggiungere e rimuovere dinamicamente riduttori dal tuo negozio e ripristinare lo stato.
  • Potreste anche essere interessati alla mia collezione di alta qualità React and Redux tutorials.

In generale, come si organizza il proprio stato, quando lo si aggiorna e ciò che si aggiorna dipende da voi. Redux fornisce semplicemente un modello e regole per il processo di esecuzione degli aggiornamenti.

+0

(Un altro) Elenco utile, quasi immediatamente mi induce a reagire-ui, che sembra gestire lo stato di rimozione in modo simile (su componentWillUnmount); Indagherò su alcune delle librerie per trovare (o aggiungere ...) uno adatto ai miei casi d'uso. L'approccio basato sui componenti per la gestione dei riduttori e dello stato sembra essere risolto in molti modi diversi (almeno quanti sono le opinioni su cosa dovrebbe essere stato). –

+3

Aspetta, mi stai dicendo che diversi sviluppatori hanno idee diverse su come fare le cose? Sono scioccato, _shocked_!:) – markerikson

+0

Sono solo nel processo di investigare su Redux e sono molto confuso da questo. Mi sembra logico che in una grande applicazione a più viste, in genere, non vuoi che lo stato rimanga nel browser dopo che l'utente ha lasciato una "pagina". Memorizzare lo stato nei componenti significa che non devi preoccuparti di questo: lo stato viene distrutto con il componente, ma metterlo in un negozio Redux sembra richiedere un notevole sovraccarico in termini di gestione esplicita del suo ciclo di vita. Ciò mi spinge molto fortemente da Redux e da un approccio basato sui componenti alla gestione dello stato. Cosa mi manca? –