我正在開發一個使用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