Stato dell'interfaccia utente semplice e reattivo

2

Sto iniziando a giocare con React e ho una domanda di base sullo stato.

Capisco che in stato React dovrebbe contenere solo dati che possono cambiare e non possono essere calcolati da altrove, ma per quanto riguarda lo stato UI semplice che non è determinato da alcun dato particolare e non ha bisogno di persistere a lungo termine?

Ad esempio, ho un menu mobile che è pieghevole su schermi piccoli tramite CSS. Lo stato iniziale di questo menu è chiuso e un semplice gestore onClick è collegato al pulsante di attivazione / disattivazione. All'interno del gestore posso:

1) usa getDOMNode e classList.toggle sull'elemento;

2) includi questa proprietà come stato, quindi chiama setState per attivare un nuovo rendering.

La seconda opzione mi sembra la modalità React, ma eccessiva soprattutto su un'app con un numero potenzialmente elevato di menu, menu a discesa ecc. Qual è lo schema migliore per gestire questo tipo di interfaccia utente di base?

    
posta Graham 24.04.2015 - 12:13
fonte

1 risposta

3

I understand that in React state should only contain data which may change and cannot be computed from elsewhere,

Penso che non sia necessario memorizzare qualcosa che non può cambiare in una variabile (usare costanti per quello). E se qualcosa può essere calcolato da un'altra parte, puoi avvolgere il calcolo in una funzione e chiamarla quando ti serve. Quindi, questo non vale per lo stato del componente React, ma per una più ampia gamma di problemi.

however what about simple UI state that is not determined from any particular data and does not need to persist long-term?

La mia opinione è che lo stato del componente React dovrebbe contenere tutto, che influisce sulla presentazione del componente in qualsiasi momento.

For example, I have a mobile menu which is collapsible on small screens via CSS. The initial state of this menu is closed, and a simple onClick handler is attached to the toggle button.

Il tuo onClick dovrebbe fare una delle seguenti azioni:

  • Long way : invia un messaggio tramite un'azione a un archivio dati sull'azione dell'utente. Datastore considererà la situazione (l'utente può fare clic sull'elemento o no, ad esempio) e invierà informazioni sullo stato in componenti (utilizzando l'azione o da trigger ing datastore (in Reflux ). Il componente modificherà il suo stato utilizzando le informazioni del datastore chiamando setState (e rerendering in seguito).

  • Modo breve : chiama setState direttamente dal tuo onClick handler.

In entrambi i casi, il state del componente dovrebbe includere sicuramente il campo collapsed (o qualsiasi altro campo, che influisce sul modo in cui il componente è sottoposto a rendering).

Un'altra considerazione importante: la filosofia React (il mio punto di vista) ignora le modifiche del DOM al di fuori delle chiamate render() . Ovviamente puoi usare jQuery da render () per modificare i componenti, ma ... questo potrebbe presto causare problemi se jQuery inizia a modificare qualcosa, che è stato appena renderizzato da React.

È sempre meglio non toccare il DOM reso da React al di fuori di render() .

    
risposta data 25.04.2015 - 22:57
fonte

Leggi altre domande sui tag