2015-08-06 22 views
37

Sono in procinto di apprendere React. Al momento ho diversi components concatenati come genitori-figli, le comunicazioni tra di loro sono fatte facilmente con i callback.Aggiorna stato componente dall'esterno React (sulla risposta del server)

Ho un tavolo (reagire componente) e un piccolo modal ajax forma (senza reagire). Quando ricevo la risposta (un elemento) dal server, desidero aggiungere alla tabella.

mia domanda principale è, è possibile grilletto un componente cambiamento di stato dafuori reagiscono (in questo caso sulla risposta del server)?

risposta

53

Can you trigger a component state change outside a component?

Sì. Ecco un esempio semplice

Nel componente reattivo impostare una chiusura disponibile globalmente che aggiornerà il suo stato quando viene attivata la funzione.

componentWillMount(){ 
globalVar.callback = (data) => { 
    // `this` refers to our react component 
    this.setState({...});  
    }; 
} 

Poi, quando la vostra risposta ajax'd ritorna si può sparare l'evento con i dati restituiti

globalVar.callback(data); 

o per qualcosa di più robusto, l'installazione di un evento personalizzato e un ascoltatore globale

+2

Eccellente! L'ho fatto funzionare salvando reagire oggetto di riferimento su un var globale, ma non sembrava giusto. In questo modo è molto più pulito. – Axxiss

+0

Ho ricevuto il seguente errore: "globalVar è undefined". Devo definirlo prima? – vgoklani

+0

Sì, prima di eseguire il rendering del componente, devi impostare il globale. – enjoylife

0

Lo standard component è quello di mantenere i dati interni veramente state, non di interesse al di fuori del componente. Se è necessario modificare un componente da nuovi dati esterni, utilizzare props, cambiare semplicemente props dall'esterno e il componente rerender reagirà alle modifiche.

Problemi correlati