Meine App verwendet Navigator für Routing und Bildschirmübergänge.Wie man eine Komponente aktualisiert, wenn der Navigator dorthin zurückspringt?
Der erste Bildschirm enthält eine Liste von Elementen. Wenn der Benutzer auf ein Objekt tippt, öffnet sich ein Detailbildschirm, in dem der Benutzer es bearbeiten kann.
Wenn der Benutzer die Bearbeitung beendet hat und zurückgeht (pop() des Navigators), spiegelt die Liste nicht die vom Benutzer vorgenommenen Änderungen wider. Der Bildschirm muss erneut geladen werden, um die aktualisierte Liste anzuzeigen.
Gibt es eine Möglichkeit, eine Komponente im Stack des Navigators zu erzwingen?
Ich habe versucht, die 'onWillFocus' prop des Navigators zu verwenden, kann ich console.log die Route, aber nicht wissen, wie man einen Verweis auf den Bildschirm, der durch die Route darstellt und erzwingt es zu aktualisieren .
Dies meldet korrekt die Route, die wir im Begriff sind, den Übergang:
_onWillFocus(route) {
console.log('will transition to ' + route.name)
},
...
<Navigator
ref={(ref) => this._navigator = ref}
style={{flex:1}}
configureScene={() => Navigator.SceneConfigs.FadeAndroid}
renderScene={this.renderScene}
onWillFocus={this._onWillFocus}
/>
Gibt es keine Zustandsänderung, die ein 'render' der' ListView' verursachen sollte? Wenn es keins gibt, sollte das erneute Rendern keinen Effekt haben und wird die alten Daten rendern, es sei denn, Ihr Rendern beruht auf Objektmutationen, was nicht die Art ist, mit "reagieren" zu gehen. –
Das Einfügen einer console.log in die Render-Methode des Listenbildschirms bestätigt, dass sie tatsächlich aufgerufen wird, wenn der Benutzer zum Bildschirm zurückkehrt. Ich habe gerade gemerkt, dass ich etwas Dummes mache: Die Datenquelle wurde nur einmal in getInitialState definiert, aber ich habe nirgendwo Code zur Aktualisierung gesetzt. Die Daten konnten nur aktualisiert werden, wenn die gesamte Komponente neu geladen wurde. – amirfl