Dovresti mai usare this.setState () quando usi redux?


111

Dovresti mai usare this.setState()quando usi Redux? O dovresti sempre inviare azioni e fare affidamento sugli oggetti di scena?


1
Non c'è niente di sbagliato nell'avere alcuni componenti con lo stato.
zerkms

3
Dipende completamente da dove viene utilizzato lo stato. Pensa ai negozi redux come se fossero globali. Tutto ciò che non deve essere globale può rimanere privato di un componente e dei suoi figli.
azium

Risposte:


139

Un chiaro utilizzo di setStatesarebbe per i componenti dell'interfaccia utente che hanno uno stato di visualizzazione locale, ma non sono rilevanti per l'applicazione globale. Ad esempio, un valore booleano che rappresenta se un menu a discesa specifico viene visualizzato attivamente non deve essere in uno stato globale, quindi è più comodamente controllato dallo stato del componente menu.

Altri esempi potrebbero includere lo stato di compressione / espansione delle linee in una visualizzazione a fisarmonica di una gerarchia. O forse la scheda attualmente selezionata nella navigazione con schede. Tuttavia, in entrambi questi esempi potresti ancora scegliere di gestire lo stato dell'interfaccia utente a livello globale. Ad esempio, ciò sarebbe necessario se si desidera mantenere lo stato di espansione / compressione nella memoria del browser in modo che venga conservato dall'aggiornamento della pagina.

In pratica è solitamente più semplice implementare tali elementi dell'interfaccia utente con lo stato locale e rifattorizzarli nello stato globale secondo necessità.


23
Per proseguire con questo, la voce relativa alle FAQ di Redux sottolinea che l' uso di setStateè completamente corretto
markerikson

2
Se hai intenzione di trasferire o utilizzare il rendering lato server, penso che dovresti sempre usare Redux
neaumusic

Il collegamento alle domande frequenti su Redux è stato aggiornato a redux.js.org/faq/organizing-state
AnandShanbhag,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.