Je suis assez nouveau pour Réagir Native et avoir un problème avec la compréhension de tout l'écosystème de celui-ci. Quoi qu'il en soit, j'ai un ListView et l'utilisateur peut naviguer vers une autre vue afin d'ajouter un nouvel élément qui sera ajouté à la liste. Quand je recule (pop) la liste n'est pas mise à jour car la source de données est assignée dans getInitialState.Réagir Natif: Mettre à jour l'affichage (ListView) sur le navigateur pop
Comment puis-je forcer la vue à mettre à jour la liste quand je saute? Est-ce fait en manipulant la route dans onDidFocus du navigateur ou est-ce que je peux ajouter quelque chose à la ListView actuelle?
Avoir fourni une version réduite du code et c'est le composant Budget et sa liste qui doit être mis à jour lorsqu'il y a eu un événement pop du navigateur.
Index fichier
var BudgetWatch_ReactNative = React.createClass({
renderScene(route, navigator){
if(route.name == 'Main'){
return React.createElement(route.component, {navigator});
}
if(route.name == 'Budgets'){
return React.createElement(route.component, {navigator, realm});
}
},
onDidFocus(route){
// Insert React Native magic?
},
render() {
return (
<Navigator
ref={(nav) => { navigator = nav; }}
style={{flex:1}}
initialRoute={{ name: 'Main', component: Main}}
renderScene={this.renderScene}
onDidFocus={this.onDidFocus}
navigationBar={
<Navigator.NavigationBar
routeMapper={NavigationBarRouteMapper(realm)}
/>
}/>
)
}
});
Budget composants
class Budgets extends React.Component{
render(){
return (
<View>
<BudgetList navigator = {this.props.navigator}/>
</View>
)
}
}
var BudgetList = React.createClass({
getInitialState: function() {
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
return {
dataSource: ds.cloneWithRows(this.props.realm.objects('Budget')),
};
},
render: function() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={this._renderRow}
/>
);
}
};
Espérons que cela suffit pour vous de comprendre le problème, merci!
Édition: Essayé pour atteindre une fonction qui définira un nouvel état avec des données pour la liste de onDidFocus. Mais depuis l'appel à cette fonction se fait par route.component.prototype.updateData (données), this.setState renvoie « Impossible de lire la propriété « enqueueSetState » undefined »
pour refléter les changements, vous devez changer d'état de dataSource en utilisant la méthode this.setState. Donc, sur chaque someMethod d'appel de changement et dans cet appel someMethod this.setState ({dataSource: newDataSource}). – NeoAsh
Ouais, je pensais que ce pourrait être résolu comme ça, mais comment puis-je attraper les changements et appeler une méthode dans ce composant. De onDidFocus dans ma classe principale je ne peux accéder à la route ou puis-je accéder à la méthode de l'enfant de la liste? C'est à partir de la vue qui ajoute un nouveau listitem, puis-je appeler someMethod dans BudgetList-component qui mettra à jour l'état avant que je pop? @NeoAsh – willedanielsson
Pouvez-vous fournir le code complet? (chez github ou ailleurs où vous vous sentez à l'aise). – NeoAsh