2016-04-14 30 views
15

Ho alcune richieste Ajax che non stanno direttamente manipolando lo stato delle mie app. In un'applicazione react/redux è necessario (o c'è qualche vantaggio) inviare un'azione per queste richieste ajax invece di inviare semplicemente una richiesta Ajax direttamente nel componente?Posso inviare una chiamata AJAX in React e Redux senza creatori di azioni e riduttori?

Per semplificare il mio scenario, essenzialmente ho un elenco di oggetti sul mio stato di ridondanza. Sto usando un modulo per inviare un nuovo oggetto al database, dopo il post di successo sto reindirizzando alla pagina di elenco in cui viene inviata una richiesta GET e l'elenco viene recuperato e lo stato viene aggiornato.

La chiamata AJAX per pubblicare un nuovo oggetto non sta direttamente manipolando il mio stato.

La squadra sto lavorando con sta attraversando l'intera 3 step redux asincrona passi es: 'FETCH_REQUESTED', 'FETCH_SUCCESS', 'FETCH_FAIL' insieme ai rispettivi riduttori per tutte le richieste AJAX ed è una grande seccatura per aggiungere di più e i riduttori don sembra avere senso

risposta

33

È possibile inviare chiamate AJAX direttamente dai componenti!

Redux è uno strumento per rendere lo stato condiviso disponibile a livello globale a più componenti e modificato in modo prevedibile. In ogni caso in cui non lo trovi necessario, non farlo.

Mantenere le chiamate AJAX nei creatori di azioni è utile quando diversi componenti fanno le stesse richieste API e quindi modificano lo stato in modi simili. È anche utile se si desidera evitare l'attivazione di una richiesta quando sono già disponibili alcuni dati memorizzati nella cache e si desidera mantenere tali controlli in un singolo posto piuttosto che sparsi tra i componenti.

Detto che Redux riguarda solo il modo in cui lo stato globale viene aggiornato, e se hai solo bisogno di fare una richiesta AJAX da qualche componente, non devi scrivere un creatore di azioni o un riduttore per esso a meno che non lo trovi conveniente.

Generalmente dicendo Redux (e Flux) è ciò che si potrebbe considerare di rifattorizzare il codice a quando si hanno molti componenti complicati; non è quello che dovresti iniziare con ogni componente. Puoi utilizzare solo le parti di cui hai bisogno (ad esempio solo le cose sincrone), o addirittura evitarlo del tutto in alcuni casi (ad esempio, un pannello comprimibile non deve memorizzare il suo stato in un archivio). Usalo solo quando comprendi i benefici specifici che ti dà in una situazione particolare, mai "nel caso" o perché è popolare.

Vedi anche my answer to “How do dispatch a Redux action with a timeout?”

per rispondere alle vostre esempio specifico, si potrebbe desiderare di utilizzare Redux per questo se si utilizzano i benefici Redux ti dà: forse spedizione un'azione per aggiornare il modulo con ottimismo e visualizzare la nuova lista di destra via e unirlo alla lista recuperata quando è disponibile in modo che l'interazione sia istantanea. Che è il caso d'uso per i creatori di azioni asincrone. Se non stai guardando questo tipo di complessità UX, non sono sicuro che Redux sia necessario.

+0

per dare seguito alla risposta di Dan Abramov - potresti voler usare - https: // github.com/gavriguy/react-indie è un componet (che ho appena creato) creato appositamente per componenti indipendenti (come i widget) che non vuoi collegare allo stato globale in base alla progettazione. – Gavriguy

+0

@DanAbramov solo una domanda: se non si posiziona lo stato del pannello comprimibile nel negozio, non si beneficerà del viaggio nel tempo e del caricamento del pacchetto Web caldo, giusto? – Buzinas

+0

Sì, ma quanto spesso impieghi tempo a eseguire il debug di una logica di pannello comprimibile? ;-) –

Problemi correlati