Я разрабатываю простое приложение todo-list с помощью React Native, моя проблема в следующем: у меня есть NavigatorIOS в корне моего проекта, с компонентом, содержащим ListView в качестве начального маршрута, и кнопкой панели навигации что приводит к представлению создания задачи.
Как только новая задача была создана, представление открывается, чтобы отображался ListView. Я пытаюсь добавить новую созданную задачу в этот ListView (его источник данных содержится в состоянии компонента).
Как выполнить такую операцию, какая хорошая практика? Я бы использовал делегат в чистом родном приложении, но здесь оба представления обрабатываются экземпляром 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)
};
Здесь вы можете найти полный исходный код.