verwenden Ich benutze react-native-router-flux für meine Apps Hauptnavigation. Ich muss einen verschachtelten Router einrichten. Ich habe eine Kartenkomponente mit einer Seitenleiste mit einer Liste von Gebieten. Wenn ich auf eine Zeile klicke, muss ich zu einer Ansicht wechseln, die die Liste der Unterteilungen enthält, die zu diesem Gebiet gehören. Ich schaute auf einige Beispiele und versuchte es herauszufinden. Momentan gibt es keine Fehler in der Konsole, aber nichts taucht in der Seitenleiste auf. Wenn es einen besseren Weg gibt, lass es mich wissen. Vielen Dank!wie verschachteltes Routing mit reaktiven nativen
Maprouter
export default class RootRouter extends Component {
render() {
return(
<Router hideNavBar={true}>
<Schema name="default" sceneConfig={Navigator.SceneConfigs.FloatFromRight}/>
<Route name="mapSurveyTerritories" wrapRouter={false} component={MapSurveyTerritories} initial={true}/>
<Route name="mapSubdivisions" wrapRouter={false} component={MapSubdivisions} />
</Router>
);
}
}
Map Component
BackAndroid.addEventListener('hardwareBackPress', function() {
Actions.pop();
return true;
});
export default class Map extends Component {
constructor(props) {
super(props);
this.state = {
region: Albuquerque,
};
}
render() {
const { region, markers,surveyTerritories,selectedMarket } = this.state;
return (
<View style={styles.container}>
<Navbar
title="Map"/>
<View style={styles.innerContainer}>
<MapView
style={styles.map}
initialRegion={region}
onLongPress={this.onPress.bind(this)}>
{markers.map(marker => (
<MapView.Marker
ref="m1"
key={marker.id}
coordinate={marker.coordinate}
title={marker.name}>
</MapView.Marker>
))}
</MapView>
<ScrollView style={styles.sidebarContainer}>
<MapRouter />
</ScrollView>
</View>
</View>
);
}
};
module.exports = Map;
Gebiete
class MapSurveyTerritories extends Component {
constructor(props) {
super(props);
var ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 != r2
});
this.state = {
dataSource: ds,
showProgress: true
};
}
componentDidMount() {
this.fetchTerritories();
}
fetchTerritories() {
this.setState({
dataSource: this.state.dataSource
.cloneWithRows(territoriesAlbuquerque),
showSpinner: false
});
}
renderRow(rowData) {
return (
<TouchableHighlight
onPress={()=>Actions.mapSubdivisions({selectedTerritory:rowData})}
underlayColor='#ddd'>
<View style={styles.row}>
<View style={{paddingLeft: 20}}>
<Text>
<Text style={{ fontWeight: '600' }}> {rowData.properties.name} </Text>
</Text>
</View>
</View>
</TouchableHighlight>
);
}
render() {
return (
<View style={{flex: 1,justifyContent: 'flex-start'}}>
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}/>
</View>
);
}
}
module.exports = MapSurveyTerritories;
Subdivisions
class MapSubdivisions extends Component {
constructor(props) {
super(props);
var ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 != r2
});
this.state = {
dataSource: ds
};
}
componentDidMount() {
this.fetchSubdivisions();
}
fetchSubdivisions() {
console.log('fetchSubdivisions', this.props.selectedTerritory);
this.setState({
dataSource: this.state.dataSource
.cloneWithRows(subdivisionsAlbuquerque),
showSpinner: false
});
}
renderRow(rowData) {
return (
<TouchableHighlight
onPress={()=>Actions.mapSubdivisionDetail({selectedSubdivision:rowData})}
underlayColor='#ddd'>
<View style={styles.row}>
<View style={{paddingLeft: 20}}>
<Text>
<Text style={{ fontWeight: '600' }}> {rowData.properties.name} </Text>
</Text>
</View>
</View>
</TouchableHighlight>
);
}
render() {
return (
<View style={{flex: 1,justifyContent: 'flex-start'}}>
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderRow.bind(this)}/>
</View>
);
}
}
module.exports = MapSubdivisions;
Werde es heute Abend ausprobieren. Also ich in der sthis Map Component. Ich würde das Navigator-Element ersetzen und an Ort und Stelle setzen, . Weil das die Auflistung korrekt lädt. Und dann würde ich die Navigationsrequisiten zwischen MainListView und DetailView implementieren? Ich komme aus einem eckigen Hintergrund, so dass ich gewohnt bin, UI-Router für verschachtelte Ansichten zu verwenden. Meine Frage ist, woher weiß das DetailView, wo es sich selbst rendern soll? –
texas697
Keine Sorge. Ja, Sie müssen den Navigator als Prop durch MainListView zu DetailView übergeben. –
Ich habe den Beitrag mit der MainListView aktualisiert. Macht es Ihnen etwas aus, mir zu zeigen, was ich tun muss. Ich verstehe, was Sie sagen, soweit es funktioniert. weiß nicht, wie man es implementiert – texas697