美文网首页ReactNative
如何优雅的使用React-Navigation3.x路由组件

如何优雅的使用React-Navigation3.x路由组件

作者: lenka01 | 来源:发表于2019-04-13 14:38 被阅读0次

使用必读文档

1.页面跳转方法:

reset - 切换路由相关
replace-切换路由相关
navigate-跳转到下一个路由,可以是路由中的任意一个。
push-作用和navigate基本差不多,唯一不同之处是当在同一个页面继续跳转时,navigate不会起作用,而push会重新路由到下一个。例如:当前在A页页面时,A.navigation.navigate('A')时,不会起作用。而使用push可用。
goBack-返回到上一个路由
pop-返回到上一个路由和goBack类似。
popToTop-返回到栈顶,并关闭所有的路由。

2.页面跳转时可携带参数

let params = {
  "key":"value"
};
navigate('RoutName',params)

3.创建navigator路由

class HomeScreen extends React.Component {
  static navigationOptions = {
    title: 'Home',
  };

  /* render function, etc */
}

class DetailsScreen extends React.Component {
  static navigationOptions = {
    title: 'Details',
  };

  /* render function, etc */
}

/* other code... */

const RootStack = createStackNavigator(
  {
    Home: HomeScreen,
    Details: DetailsScreen,
  },
  {
    initialRouteName: 'Home', //根页面
    /* The header config from HomeScreen is now here */
    defaultNavigationOptions: {
      headerStyle: {
        backgroundColor: '#f4511e',
      },
      headerTintColor: '#fff',
      headerTitleStyle: {
        fontWeight: 'bold',
      },
    },
  }
);

export default createAppContainer(RootStack);

注意:3.x版本之后需要返回一个包裹createAppContainer。

4.创建tabNavigator路由

import React from 'react';
import { Text, View,Image } from 'react-native';
import { createBottomTabNavigator, createAppContainer } from 'react-navigation';

class HomeScreen extends React.Component {

static navigationOptions = {
        tabBarLabel:'Home',
        tabBarIcon : ({focused})=>{
            const image = focused?require('./Resource/message.png'):require('./Resource/message-outline.png');
            return (
                <Image source={image} style={{width:24,height:24}}/>
            )
        },
        tabBarOnPress: ({ navigation, defaultHandler }) => {
            defaultHandler();
            console.log(' press'+navigation)
        }
    };

  render() {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text>Home!</Text>
      </View>
    );
  }
}

class SettingsScreen extends React.Component {

static navigationOptions = {
        tabBarLabel:'Setting',
        tabBarIcon : ({focused})=>{
            const image = focused?require('./Resource/message.png'):require('./Resource/message-outline.png');
            return (
                <Image source={image} style={{width:24,height:24}}/>
            )
        },
        tabBarOnPress: ({ navigation, defaultHandler }) => {
            defaultHandler();
            console.log(' press'+navigation)
        }
    };

  render() {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text>Settings!</Text>
      </View>
    );
  }
}

const TabNavigator = createBottomTabNavigator({
  Home: HomeScreen,
  Settings: SettingsScreen,
},{
        // tabBarItem整体配置
        initialRouteName: 'Home',  //第一个展示页面
        swipeEnabled: false,      //是否支持手势切换
        animationEnabled: false, //支持动画
        lazy: true,  //懒加载
        tabBarOptions:{
            activeTintColor:'#1F8CEB',
            inactiveTintColor:'#4b4b4b',
        },
        backBehavior:'none'  //安卓物理返回键处理
    });

export default createAppContainer(TabNavigator);

5.navigator+tabNavigator

import {
    createSwitchNavigator,
    createBottomTabNavigator,
    createStackNavigator,
    createAppContainer,
} from 'react-navigation';
import MessageList from './MessageList';
import SubApplication from './SubApplication';
import Contacts from './Contacts';
import MineCenter from './MineCenter';
import LoginPage from './LoginPage';
import SettingPage from './SettingPage';


const TabNavigator = createBottomTabNavigator({
    message:{
        screen:MessageList,
    },
    subApp:{
        screen:SubApplication,
    },
    contacts:{
        screen:Contacts,
    },
    mine:{
        screen:MineCenter,
    }
}, {
        // tabBarItem整体配置
        initialRouteName: 'message',
        swipeEnabled: false,
        animationEnabled: false,
        lazy: true,
        tabBarOptions:{
            activeTintColor:'#1F8CEB',
            inactiveTintColor:'#4b4b4b',
        },
        backBehavior:'none'
    }
);

const StackNavigator = createStackNavigator(
    {
        tabBar: {
            screen: TabNavigator,
            navigationOptions:{
                header:null //返回null时可以隐藏导航栏bar
            }
        },
        detail: {
            screen: SettingPage,
            // navigationOptions : {
            //     title:'设置'
            // }
        }
    },
    {
        navigationOptions:({navigation}) => ({
            //title:navigation.state.routeName,
            headerStyle:{
                backgroundColor:'#f4511e',
            },
            headerTintColor:'#fff',
            headerTitleStyle:{
                fontWeight:'bold'
            }
        })
    }
);

7.登录+navigator+tabBarNavigatior


import {
    createSwitchNavigator,
    createBottomTabNavigator,
    createStackNavigator,
    createAppContainer,
} from 'react-navigation';
import MessageList from './MessageList';
import SubApplication from './SubApplication';
import Contacts from './Contacts';
import MineCenter from './MineCenter';
import LoginPage from './LoginPage';
import SettingPage from './SettingPage';


const TabNavigator = createBottomTabNavigator({
    message:{
        screen:MessageList,
    },
    subApp:{
        screen:SubApplication,
    },
    contacts:{
        screen:Contacts,
    },
    mine:{
        screen:MineCenter,
    }
}, {
        // tabBarItem整体配置
        initialRouteName: 'message',
        swipeEnabled: false,
        animationEnabled: false,
        lazy: true,
        tabBarOptions:{
            activeTintColor:'#1F8CEB',
            inactiveTintColor:'#4b4b4b',
        },
        backBehavior:'none'
    }
);

const StackNavigator = createStackNavigator(
    {
        tabBar: {
            screen: TabNavigator,
            navigationOptions:{
                header:null
            }
        },
        detail: {
            screen: SettingPage,
            // navigationOptions : {
            //     title:'设置'
            // }
        }
    },
    {
        navigationOptions:({navigation}) => ({
            //title:navigation.state.routeName,
            headerStyle:{
                backgroundColor:'#f4511e',
            },
            headerTintColor:'#fff',
            headerTitleStyle:{
                fontWeight:'bold'
            }
        })
    }
);


export default createAppContainer(createSwitchNavigator(
    {
        login: LoginPage,
        tabBarController: StackNavigator
    },{
        initialRouteName:'login'
    }
));

相关文章

  • 如何优雅的使用React-Navigation3.x路由组件

    使用必读文档 1.页面跳转方法: 2.页面跳转时可携带参数 3.创建navigator路由 注意:3.x版本之后需...

  • react-router的基本使用

    1). 安装 2). 定义各个路由组件 index.js注册路由 在组件中使用路由 1、先引入需要用到的路由组件 ...

  • 路由懒加载于svg

    路由懒加载:const 组件名=() => import('组件路径'); 路由传参: 注意:,当使用路由参数时,...

  • 2018-05-15

    路由懒加载:const 组件名=() => import('组件路径'); 路由传参: 注意:,当使用路由参数时,...

  • 路由懒加载

    路由懒加载:const 组件名=() => import(‘组件路径’);路由传参: 注意:,当使用路由参数时,例...

  • 路由懒加载和vue代理

    路由懒加载:const 组件名=() => import('组件路径');路由传参: 注意:,当使用路由参数时,例...

  • 路由懒加载

    路由懒加载:const 组件名=() => import('组件路径');路由传参: 注意:,当使用路由参数时,例...

  • 路由懒加载和vue代理

    路由懒加载:const 组件名=() => import('组件路径');路由传参: 注意:,当使用路由参数时,例...

  • 路由配置、路由参数

    一、路由配置 1、路由组件 路由组件就是一个普通组件,只不过不需要使用全局或者局部注册。在路由配置中绑定对应的路由...

  • vue-router

    # 路由配置 ## 路由组件 > 路由组件就是一个普通组件,只不过不需要使用全局或者局部注册。在路由配置中绑定对应...

网友评论

    本文标题:如何优雅的使用React-Navigation3.x路由组件

    本文链接:https://www.haomeiwen.com/subject/ryilwqtx.html