我正在开发一个使用React Native的简单待办事项列表应用程序,我的问题如下:我的项目根目录中有一个NavigatorIOS,其中包含一个包含ListView的组件路线和一个导航栏按钮,导致任务创建视图。在同级视图之间React Native Pass数据
一旦创建了新任务,视图就会弹出,以便显示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)
};
您可以找到complete source code here。
所以你建议用某种巨大的全局变量/面积与视图之间传递数据?这听起来像极坏的架构...... – Blackus
@Blackus否则,你如何获得任务列表? “全球”是可选的。 – KChen
这里就是这一点。在开发本机时,我们可以使用协议或传递代码块来执行(如回调)。所以任务列表只与这两个视图“共享”,它与其他事物并不存在很大的共同点。 – Blackus