per quanto ho capito Redux si tratta di mantenere tutto lo stato dell'interfaccia utente in un unico negozio (per poter riprodurre facilmente determinati stati e per non avere effetti collaterali). È possibile manipolare lo stato tramite azioni di attivazione che attivano i riduttori.Come comunicare le modifiche dello stato dell'interfaccia utente tra i componenti React con Redux?
Attualmente sto scrivendo una piccola app tipo blog in cui è possibile semplicemente creare e modificare post. Ho un dialogo per la creazione di un post, circa il metodo del componente App
render
restituisce qualcosa di simile:
<div>
<AppBar ... />
<PostFormDialog
addPost={actions.addPost}
ref="postFormDialog" />
<PostList
posts={posts}
actions={actions} />
</div>
La mia domanda è: se la condizione della finestra di dialogo (aperto o chiuso) essere parte dell'oggetto Stato del componente App? E dovrebbe quindi aprire e chiudere la finestra di dialogo essere attivato tramite un'azione invece di fare qualcosa di simile a quanto segue:
onTriggerCreatePostDialog(e) {
this.refs.postFormDialog.show();
}
dove onTriggerCreatePostDialog
viene attivato attraverso qualche click ascoltatore in un pulsante "Crea" o giù di lì.
Mi sembra un po 'strano farlo tramite un'azione perché introduce una sorta di "indirezione".
Tuttavia, supponendo che voglio riutilizzare la finestra di dialogo per l'azione di modifica, devo essere in grado di aprire la finestra di dialogo da elementi che sono più in profondità nella struttura dei componenti, ad esempio, da un componente Post
che è un figlio del PostList
componente. Quello che ho potuto fare è passare la funzione onTriggerCreatePostDialog
verso il basso della gerarchia tramite la proprietà props
, ma che sembra ingombrante per me ...
Così int la fine è è anche di comunicare tra i componenti che non sono in un genitore-figlio diretto relazione. Ci sono altre opzioni? Dovrei in qualche modo utilizzare un bus evento globale? Al momento sono abbastanza incerto.
Si supponga che la finestra di dialogo non sia modale. Inizialmente non è mostrato e il suo stato è gestito come tu proponi. Clicco su un pulsante, 'showDialog' diventa veritiero e viene mostrata questa finestra di dialogo. Ora, se dovessi fare clic in un punto diverso dalla finestra di dialogo, viene chiuso nuovamente, ma 'showDialog' non viene modificato di conseguenza, a meno che non gestisca esplicitamente tale caso in' PostFormDialog'. Questo è solo un esempio in cui la gestione dello stato del dialogo diventa ingombrante, secondo me. Lo faresti comunque? –
Riguardo al componente intelligente: sarebbe forse ragionevole introdurre un altro componente intelligente per gestire lo stato della finestra di dialogo modale, ad esempio? Supponendo che la finestra di dialogo possa essere utilizzata per creare un nuovo post E modificare quelli esistenti. Inoltre devi gestire cose come "cancellare" la finestra di dialogo dopo la creazione/modifica riuscita e così via ... –
questo approccio funzionerà, ma interromperà anche qualsiasi animazione di comparsa/scomparsa della finestra di dialogo, vero? Poiché il componente principale è stato nuovamente sottoposto a rendering, la finestra di dialogo verrà rimossa immediatamente dallo schermo. Mi chiedo quale sia la soluzione migliore per questo? –