2017-06-06 21 views
0

Ich erstelle eine App in React Native, und ich verwende React Navigation. Auf der Hauptseite habe ich eine Reihe von Diensten. Ich möchte auf der Grundlage der Indizes der Dienste auf verschiedene Bildschirme in der App umleiten können. Dies ist ein Codeausschnitt. Wie mache ich das?Routing mit React Navigation in React Native

import React, { Component } from 'react' 
import { 
    StyleSheet, 
    Text, 
    TextInput, 
    View, 
    TouchableHighlight, 
    ActivityIndicator, 
    AppRegistry, 
    Image 
} from 'react-native'; 
import { StackNavigator } from 'react-navigation'; 
import { addNavigationHelpers } from 'react-navigation'; 
import SelectMultiple from './SelectMultiple'; 
import PackingPage from './PackingPage'; 

const services = 
['Packing Items in Boxes for Shipping and Moving', 
'Unpacking Boxes', 
'Wrap Furniture for Moving and Shipping', 
'Wrap Machinery', 
'Loading/Lumper Services', 
'Unloading/Lumper Services', 
'Custom Crating for Boxes, Furniture and Machinery', 
'Palletizing Services for Boxes, Furniture and Machinery', 
'Shipping/Moving Service to 2nd location', 
'Heat Shrink wrapping', 
'Shipping Food in AC trucks', 
'Shipping Food in Non AC Truck', 
'Shipping Cars'] 

class PackingApp extends Component{ 

    static navigationOptions = { 
    title: '', 
    }; 

    state = { selectedServices: [] } 

    onSelectionsChange = (selectedServices) => { 
    this.setState({ selectedServices }) 
    } 

Ich habe auch dieses Code-Schnipsel für einen Stack-Navigator mit zwei Bildschirmen bisher. Ich möchte für jeden Dienst einen Bildschirm basierend auf seinem Index hinzufügen. Ich habe es mit einem if/else versucht, aber ich kann es nicht zum Laufen bringen.

const PackingNav = StackNavigator({ 
    Home: { screen: HomePage }, 
    PackingPage: { screen: PackingPage }, 
}, 
{ 
    headerMode: "none" 
}); 
+0

Ihr Array von Dienstleistungen ist nur ein Array von Strings. Sie müssen eine Komponente pro Bildschirm (oder Dienst) erstellen und diese dann zum StackNavigator hinzufügen, wie Sie es gerade für die beiden anderen Bildschirme getan haben. –

+0

Ja, ich habe eine Komponente für jeden Bildschirm. Jeder Dienst sollte einem Bildschirm entsprechen. Wie verwende ich die Indizes der Services-Elemente, um zu dem entsprechenden Bildschirm zu gelangen? –

Antwort

0

Es gibt keinen automatischen Weg, um Ihre Bildschirme in Ihre Reihe von Dienstleistungen Reagieren Navigation zu verbinden, müssen Sie dies manuell tun:

const services = [ 
    { key:'SomeUniqueIdentifier', name:'Packing Items in Boxes for Shipping and Moving' }, 
    { key:'AnotherUniqueIdentifier', name:'Unpacking Boxes' }, 
    ... 
]; 

const PackingNav = StackNavigator({ 
    Home: { screen:HomePageComponent }, 
    SomeUniqueIdentifier: { screen:PackingPageComponent }, 
    AnotherUniqueIdentifier: { screen:UnpackingPageComponent }, 
    ... 
}); 

Dann in Ihrer HomePageComponent (oder welchen auch immer Komponente, die Sie‘ Re Verbindung zu den Diensten von), können Sie etwas tun in der Art von:

render() { 
    const { navigate } = this.props.navigation; 
    let menu = []; 
    services.forEach(service => { 
     menu.push(<Button 
     onPress={() => navigate(service.key)} 
     title={service.name} 
     />); 
    }); 
    return (
     <View> 
     {menu} 
     </View> 
    ); 
} 
+0

Super! Ich habe noch zwei Fragen. Ich möchte mehr als eine Option auswählen und die Optionen in einer anderen Farbe auswählen können. Wenn beispielsweise die Verpackungsoption ausgewählt ist, ändert die Option die Farbe und die Route zur Verpackungsseite, sobald die nächste Schaltfläche auf der Schaltfläche der Seite gedrückt wird. Wenn jedoch sowohl die Optionen zum Packen als auch zum Entpacken ausgewählt sind, werden die Optionen zu einer einzelnen Seite weitergeleitet, die die Verpackungsseite über der Entpackungsseite stapelt. Wenn mehr Optionen ausgewählt sind, sollte es dasselbe tun. Wie gehe ich vor? –

+0

Die Ein/Aus-Zustände der ausgewählten Optionen werden außerhalb von React Navigation verwaltet. Eine Möglichkeit wäre, eine Statuseigenschaft 'selectedOptions' für die Komponente zu haben, die Sie bei jedem Umschalten einer Option aktualisieren (und Stile anwenden, je nachdem, ob die Option in dieser Statuseigenschaft' selectedOptions' liegt), und dann eine Schaltfläche bei das Ende, das, wenn es angetippt wird, React Navigations 'navigate()' aufruft und die Liste von 'selectedOptions' als Parameter weiterleitet (siehe https://reactnavigation.org/docs/navigators/navigation-actions), die zur Entscheidung verwendet werden können welche Komponenten auf dieser Seite gerendert werden sollen. –

Verwandte Themen