Sto sviluppando una semplice applicazione todo-list utilizzando React Native, il mio problema è il seguente: Ho un NavigatorIOS alla radice del mio progetto, con un componente contenente un ListView come iniziale percorso e un pulsante della barra di navigazione che conduce a una vista di creazione dell'attività.React Native Pass dati tra le visualizzazioni di pari livello
Una volta creata una nuova attività, la vista viene visualizzata in modo che venga visualizzato il ListView. Sto cercando di aggiungere la mia attività appena creata a questo ListView (la sua origine dati è contenuta nello stato del componente).
Come eseguire tale operazione, qual è la buona pratica? Vorrei usare un delegato in pura app nativa ma qui, entrambe le viste sono gestite dall'istanza NavigatorIOS.
index.ios.js
addTask() {
console.log("Test");
},
render() {
return (
<React.NavigatorIOS
ref="nav"
style={styles.container}
tintColor="#ED6063"
initialRoute={{
title: "Tasks",
component: TasksList,
rightButtonTitle: 'Add',
onRightButtonPress:() => {
this.refs.nav.navigator.push({
title: "New task",
component: NewTask,
passProps: {
onTaskAdded: this.addTask
},
leftButtonTitle: "Cancel"
});
}
}}/>
);
}
NewTask.js
taskAdded() {
console.log("Added: " + this.state.title + " - " + this.state.description);
this.props.onTaskAdded({
title: this.state.title,
description: this.state.description
});
this.props.navigator.pop();
}
TasksList.js
var dataSource = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
this.state = {
dataSource: dataSource.cloneWithRows(data)
};
È possibile trovare il complete source code here.
Quindi si consiglia di utilizzare una sorta di enorme variabile/area globale per passare i dati tra le viste? Sembra un'architettura pessima ... – Blackus
@Blackus Altrimenti, come si ottiene l'elenco delle attività? "Globale" è facoltativo. – KChen
Che esattamente il punto qui. Durante lo sviluppo nativo, possiamo usare il protocollo o passare blocchi di codice da eseguire (come il callback). Quindi l'elenco delle attività è "condiviso" solo con queste due viste, non è su un grande spazio comune con altre cose. – Blackus