2017-06-06 84 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),这些参数可用于决定哪些组件在该页面上呈现。 –

相关问题