2016-03-04 11 views
7

Mentre si lavora con Reagire nativo, ho un paio di componenti che vengono spinti l'uno sopra l'altro, alcuni dei quali cambiare lo stato del componente sotto di loro, in questo modo:Come aggiornare lo stato React dopo aver eseguito navigator.pop()?

sociali -> Gruppi -> Aggiungi gruppo

Tuttavia, quando eseguo navigator.pop() per tornare al componente precedente (ad esempio, dopo aver aggiunto un gruppo all'account di un utente), il componente sottostante (in questo caso, "Gruppi") non verrà aggiornato con lo stato più recente .

Cosa sto facendo di sbagliato qui?

+0

Non penso che questo abbia nulla a che fare con il navigatore. È necessario modificare lo stato del componente superiore con l'attivazione di un rerender. –

risposta

3

Risulta sono stato in grado di risolvere questo inserendo un componentWillUpdate sulla componente 'Gruppi', vale a dire, ogni volta che i Gruppi aggiornamenti dei componenti, si innesca una funzione loadGroupsData:

componentWillUpdate() { 
    this.loadGroupsData(); 
} 

... a cui la funzione loadGroupsData verifica eventuali differenze e, se presenti, carica:

loadGroupsData() { 
api.getUserGroups(this.state.userId, (data) => { 
    data.forEach((group, index) => { 
    group.groupname = group.groupname; 
    }); 
    if (this.state.dataSource._cachedRowCount === undefined || this.state.dataSource._cachedRowCount !== data.length) { 
    this.setState({ 
     usersGroups: data.map(data => data.groupname), 
     dataSource: this.state.dataSource.cloneWithRows(data), 
     loaded: true, 
    }); 
    } 
});} 
+3

Non penso che sia possibile impostareState nella funzione componentWillUpdate. La documentazione nativa reagisce dice. Nota: Non è possibile utilizzare this.setState() in questo metodo. Se è necessario aggiornare lo stato in risposta a una modifica dell'elica, utilizzare invece componentWillReceiveProps. https://facebook.github.io/react/docs/component-specs.html –

+1

ricevendo chiamate infinite se metto setState su componentWillUpdate, hai qualche idea su come prevenirlo? – jatazoulja

Problemi correlati