React Native 之createDrawerNavigator和createSwitchNavigator

Posted liuw-flexi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React Native 之createDrawerNavigator和createSwitchNavigator相关的知识,希望对你有一定的参考价值。

其他代码接上篇文章

createDrawerNavigator 抽屉

createSwitchNavigator 模拟登录=>主界面

 

index.js

/**
 * @format
 */

import AppRegistry from ‘react-native‘;
import createAppContainer from ‘react-navigation‘;
import App from ‘./navigators/AppNavigators‘;
import name as appName from ‘./app.json‘;

AppRegistry.registerComponent(appName, () => App);

 

AppNavigators.js

技术图片
import React from ‘react‘; //只要在页面中使用了基础组件 都需要导入这句话 不然会报错
import Button,Platform,ScrollView,SafeAreaView from ‘react-native‘;
import  createStackNavigator,
  createAppContainer,
  createBottomTabNavigator,
  createMaterialTopTabNavigator,
  createDrawerNavigator,
  DrawerItems,
  createSwitchNavigator,
  from ‘react-navigation‘;
import HomePage from ‘../pages/HomePage‘;
import Page1 from ‘../pages/Page1‘;
import Page2 from ‘../pages/Page2‘;
import Page3 from ‘../pages/Page3‘;
import Page4 from ‘../pages/Page4‘;
import Page5 from ‘../pages/Page5‘;
import Login from ‘../pages/Login‘;
import Ionicons from ‘react-native-vector-icons/Ionicons‘
import MaterialIcons from ‘react-native-vector-icons/MaterialIcons‘


const DrawerNav=createDrawerNavigator(
  
  Page4:
    screen:Page4,
    navigationOptions:
      drawerLabel:‘Page4‘,
      drawerIcon:(tintColor)=>(
        <MaterialIcons
          name=‘drafts‘
          size=24
          style=color:tintColor
        />
      )
    
  ,
  Page5:
    screen:Page5,
    navigationOptions:
      drawerLabel:‘Page5‘,
      drawerIcon:(tintColor)=>(
        <MaterialIcons
          name=‘move-to-inbox‘
          size=24
          style=color:tintColor
        />
      )
    
  
,

  initialRouteName:‘Page4‘,
  contentOptions:
    activeTintColor:‘#e91e63‘,
  ,
  contentComponent:(props)=>(
    <ScrollView style=backgroundColor:‘#789‘,flex:1>
      <SafeAreaView forceInset=top:‘always‘,horizontal:‘never‘>
        <DrawerItems ...props/>
      </SafeAreaView>
    </ScrollView>
  )

);

const AppTopNavigator=createMaterialTopTabNavigator(
  
  Page1:
     screen:Page1,
     navigationOptions:
       tabBarLabel: ‘All‘
     
  ,
  Page2:
     screen:Page2,
     navigationOptions:
       tabBarLabel: ios
     
  ,
  Page3:
     screen:Page3,
     navigationOptions:
       tabBarLabel: android
     
  ,
  Page4:
     screen:Page4,
     navigationOptions:
       tabBarLabel: ‘React-Native‘
     
  ,
,
  
  tabBarOptions:
    tabStyle:mindWidth: 50,
    upperCaseLabel:false,//是否使标签大写 默认true
    scrollEndabled:true,//是否支持选项卡滚动 默认false
    style:
      backgroundColor:‘#678‘//TabBar背景色
    ,
    indicatorStyle:
      height:2,
      backgroundColor:‘white‘
    ,//标签指示器样式
    labelStyle:
      fontSize:13,
      marginTop:6,
      marginBottom:6
    ,// 文字的样式


  

);

const AppBottomNavigator=createBottomTabNavigator(
  
    Page1:
       screen:Page1,
       navigationOptions:
         tabBarLabel: ‘最热‘,
         tabBarIcon:(tintColor,focused)=>(<Ionicons
            name=‘ios-home‘
            size=26
            style=color:tintColor
         />)
       
    ,
    Page2:
       screen:Page2,
       navigationOptions:
         tabBarLabel: ‘趋势‘,
         tabBarIcon:(tintColor,focused)=>(<Ionicons
            name=‘ios-appstore‘ // 全部小写
            size=26
            style=color:tintColor
         />)
       
    ,
    Page3:
       screen:Page3,
       navigationOptions:
         tabBarLabel: ‘收藏‘,
         tabBarIcon:(tintColor,focused)=>(<Ionicons
            name=‘ios-people‘
            size=26
            style=color:tintColor
         />)
       
    ,
    Page4:
       screen:Page4,
       navigationOptions:
         tabBarLabel: ‘我的‘,
         tabBarIcon:(tintColor,focused)=>(<Ionicons
            name=‘ios-aperture‘
            size=26
            style=color:tintColor
         />)
       
    ,
  ,
  
    tabBarOptions:
      activeTintColor: Platform.OS === ‘ios‘ ? ‘#e91e63‘ : ‘#fff‘,
    
  
);

const AppStack = createStackNavigator(
    Home: 
        screen: HomePage
    ,
    Page1: 
        screen: Page1
    ,
    Page2: 
        screen: Page2,
        navigationOptions: //在这里定义每个页面的导航属性,静态配置
            title: "This is Page2.",
        
    ,
    Page3: 
        screen: Page3,
        navigationOptions: (props) => //在这里定义每个页面的导航属性,动态配置
            const navigation = props;
            const state, setParams = navigation;
            const params = state;
            return 
                title: params.title ? params.title : ‘This is Page3‘,
                headerRight: (
                    <Button
                        title=params.mode === ‘edit‘ ? ‘保存‘ : ‘编辑‘
                        onPress=()=>setParams(mode: params.mode === ‘edit‘ ? ‘‘ : ‘edit‘)
                            
                    />
                ),
            
        
    ,

    Bottom:
      screen:AppBottomNavigator,
      navigationOptions:
        title:‘BottomNavigator‘
      
    ,

    Top:
      screen:AppTopNavigator,
      navigationOptions:
        title:‘TopNavigator‘
      
    ,

    DrawerNav:
      screen:DrawerNav,
      navigationOptions:
        title:‘This is DrawNavigator‘,

      
    
,
 
    defaultNavigationOptions: 
        // header: null,// 可以通过将header设为null 来禁用StackNavigator的Navigation Bar
    
  
);

const AuthStack = createStackNavigator(
    Login: 
        screen: Login
    ,
,
    navigationOptions: 
        // header: null,// 可以通过将header设为null 来禁用StackNavigator的Navigation Bar
    
);

const AppStackNavigator = createSwitchNavigator(
    
        Auth: AuthStack,
        App: AppStack,
    ,
    
        initialRouteName: ‘Auth‘,
    
);

const App = createAppContainer(AppStackNavigator)
export default App
View Code

 

Login.js

技术图片
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * @format
 * @flow
 */

 import React, Fragment,Component from ‘react‘;
 import 
   StyleSheet,
   View,
   Text,
   Button,
  from ‘react-native‘;

 export default class Login extends Component 

   render()

     const navigation=this.props;
     return (
       <View style=styles.container>
         <Text style=styles.welcome>欢迎来到Login</Text>
         <Button
           title=‘Go App‘
           onPress=()=>
             navigation.navigate(‘App‘);
           
         />


       </View>
       );
   
 

 const styles=StyleSheet.create(
   container:
     flex:1,
   ,
   welcome:
     fontSize:20,
     textAlign: ‘center‘,
   

 );
View Code

 

效果图

技术图片

 

以上是关于React Native 之createDrawerNavigator和createSwitchNavigator的主要内容,如果未能解决你的问题,请参考以下文章

React Native开发React Native控件之ProgressBarAndroid进度条讲解(12)

React-Native入门指导之iOS篇 —— 一准备工作

React Native开发React Native控件之DrawerLayoutAndroid抽屉导航切换组件讲解(13)

React Native 之 Flex

REACT NATIVE 系列教程之九REACT NATIVE版本升级步骤与注意事项!

React Native开发React Native控件之WebView组件详解以及实例使用(22)