2017-06-06 93 views
0

我在React Native中創建了一個應用程序,並且正在使用React Navigation。在主頁面中,我有一系列的服務。我希望能夠根據服務的索引路由到應用中的不同屏幕。這是代碼的一部分。我怎麼做?在React Native中使用React導航進行路由

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 }) 
    } 

到目前爲止,我還有一個帶有兩個屏幕的堆棧導航器代碼片段。我想爲每個服務添加一個基於其索引的屏幕。我試過用if/else來做這件事,但我無法讓它工作。

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

你的服務數組只是一個字符串數組。您需要爲每個屏幕(或服務)創建一個組件,然後將其添加到StackNavigator,就像您爲其他兩個屏幕所做的一樣。 –

+0

是的,我爲每個屏幕都有一個組件。每項服務應該對應一個屏幕。如何使用服務元素的索引來路由到其相應的屏幕? –

回答

0

有沒有連接你的屏幕在陣營導航到你的服務陣列自動方式,則需要手工做的:

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 }, 
    ... 
}); 

然後在你的HomePageComponent(或任何組件中」重新鏈接到服務),你可以做一些事情:

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

太棒了!我還有兩個問題。我希望能夠選擇多個選項,並選擇一個不同顏色的選項。例如,如果選擇了打包選項,則一旦按下頁面按鈕上的下一個按鈕,該選項就會改變顏色並路由到打包頁面。但是,如果選擇了打包和解包選項,則選項將路由到單個頁面,將打包頁面堆疊在解包頁面的頂部。如果選擇了更多的選項,它應該做同樣的事情。我該如何去做呢? –

+0

所選選項的開/關狀態是您在「反應導航」之外管理的內容。一種方法是在選項切換時更新組件上的'selectedOptions'狀態屬性(並根據選項是否位於'selectedOptions'狀態屬性中應用樣式),然後在當點擊時,調用React Navigations'navigate()'並將'selectedOptions'的列表作爲參數傳遞給參數(請參閱https://reactnavigation.org/docs/navigators/navigation-actions),這些參數可用於決定哪些組件在該頁面上呈現。 –