React Native 使用StackNavigation跳转页面

React Native项目中,跳转页面之前用的是Navigator,Navigator已经被React Native废弃,官方推荐的是react-navigation来替代Navigator,使用react-navigation的导航组件可以让页面跳转的实现更加简洁。

一、react-navigation包括下面三个Navigator:

  • StackNavigator: 这个组件是用来代替之前的Navigator的。凡是维持一种“先进后厨”的栈式导航的话就可以用这个。
  • TabNavigator:这个组件和iOS的`TabBarController。看起来是这样的。
  • DrawerNavigator:这个组件就是抽屉式的导航菜单。在React Native里只有Android才有DrawerLayoutAndroid,在iOS里是没有的。有了DrawerNavigator,两个平台都可以用了。

二、StackNavigator组件使用示例。

1、项目集成react-navigation

在项目根目录下,运行:npm install react-navigation --save

2、在App.js组件中

import {
  StackNavigator,
} from 'react-navigation';

export default class App extends Component<Props> {
    constructor(props) {
        super(props);
    }

  render() {
    return (
        <Navigator />
    )
  }
}

const StackRouteConfigs = {
    Tab: {
        screen: Tab,
    },
    Msg:{
        screen: MsgScene
    }
};
const StackNavigatorConfigs = {  // 表示导航器的配置,包括导航器的初始页面、各个页面之间导航的动画、页面的配置选项等等
    initialRouteName: 'Tab',
    navigationOptions: {
        title: '默认标题栏',
        headerStyle: {backgroundColor: color.primary},  // 设置导航头部样式
        headerTitleStyle: {color: '#333333'},  // 设置导航头部标题样式
        // headerTintColor: '#333333',
         showIcon: true,
    }
};
// StackNavigator 导航组件,用来实现各个界面跳转
const Navigator = StackNavigator(StackRouteConfigs, StackNavigatorConfigs);

3、Tab .js的跳转逻辑

	export default class Tab extends Component{
    //UI渲染
    render() {
        return(
            <View style={styles.container}>
                {/*<BackHeader style={styles.title} title="带back的标题栏" showBack={true} />*/}
                <TouchableWithoutFeedback
                    onPress={()=> {
                        this.props.navigation.navigate('Msg', { deviceId: '10010' })
                    }}>
                    <View style={styles.content}>
                        {/*!//跳转到消息页面*/}
                        <Text style={styles.text}>我的,,点击可以跳转</Text>
                    </View>
                </TouchableWithoutFeedback>

            </View>
        );
    }
}

4、跳转到MsgScene.js

export default class MsgScene extends Component{
    //UI渲染
    render() {
        const { params } = this.props.navigation.state;
        //return不带()会报错
        return(
            <View style={styles.container}>
                <TouchableOpacity
                    //被按下时,文字的不透明度
                    activeOpacity={0.2}
                    onPress={()=> {
                        /*//返回上个页面*/
                        this.props.navigation.goBack()
                    }}>

                    <View style={styles.content}>
                        <Text style={styles.text}>我是{params.deviceId}设备的消息页面,,点击可以跳转回去</Text>
                    </View>

                </TouchableOpacity>
            </View>
        );
    }
}

三、实现效果

由Tab .js页面跳转到Msgcene.js页面,并传递参数10010,在Msgcene.js页面接受设备id参数,点击back可以跳转回去。
在这里插入图片描述
在这里插入图片描述

四、react-navigation跳转总结

3、参数

navigationOptions为对应路由页面的配置选项:

title - 可以作为头部标题 headerTitle ,或者Tab标题 tabBarLabel
header - 自定义的头部组件,使用该属性后系统的头部组件会消失
headerTitle - 头部的标题,即页面的标题
headerBackTitle - 返回标题,默认为 title
headerTruncatedBackTitle - 返回标题不能显示时(比如返回标题太长了)显示此标题,默认为 “Back”
headerRight - 头部右边组件
headerLeft - 头部左边组件
headerStyle - 头部组件的样式
headerTitleStyle - 头部标题的样式
headerBackTitleStyle - 头部返回标题的样式
headerTintColor - 头部颜色
headerPressColorAndroid - Android 5.0 以上MD风格的波纹颜色
gesturesEnabled - 否能侧滑返回, iOS 默认 true , Android 默认 false

StackNavigatorConfigs 参数表示导航器的配置,包括导航器的初始页面、各个页面之间导航的动画、页面的配置选项等等:

initialRouteName - 导航器组件中初始显示页面的路由名称,如果不设置,则默认第一个路由页面为初始显示页面
initialRouteParams - 给初始路由的参数,在初始显示的页面中可以通过 this.props.navigation.state.params 来获取
navigationOptions - 路由页面的配置选项,它会被 RouteConfigs 参数中的 navigationOptions 的对应属性覆盖。
paths - 路由中设置的路径的覆盖映射配置
mode - 页面跳转方式,有 card 和 modal 两种,默认为 card :
card - 原生系统默认的的跳转
modal - 只针对iOS平台,模态跳转
headerMode - 页面跳转时,头部的动画模式,有 float 、 screen 、 none 三种:
float - 渐变,类似iOS的原生效果
screen - 标题与屏幕一起淡入淡出
none - 没有动画
cardStyle - 为各个页面设置统一的样式,比如背景色,字体大小等
transitionConfig - 配置页面跳转的动画,覆盖默认的动画效果
onTransitionStart - 页面跳转动画即将开始时调用
onTransitionEnd - 页面跳转动画一旦完成会马上调用

navigation,在导航器中的每一个页面,都有 navigation 属性,该属性有以下几个属性/方法:

navigate - 跳转到其他页面
state - 当前页面导航器的状态
setParams - 更改路由的参数
goBack - 返回
dispatch - 发送一个action

navigete,调用这个方法可以跳转到导航器中的其他页面,此方法有三个参数:

— routeName 导航器中配置的路由名称
— params 传递参数到下一个页面
— action action
例如: this.props.navigation.navigate(‘Detail’, {param: ‘mine’});

state,state 里面包含有传递过来的参数 params 、 key 、路由名称 routeName ,打印log可以看得到:

{ params: { param: ‘i am the param’ },
key: ‘id-1500546317301-1’,
routeName: ‘Mine’ }

setParams,更改当前页面路由的参数,比如可以用来更新头部的按钮或者标题。

componentDidMount() {
this.props.navigation.setParams({param:‘my’})
}

goBack,回退,可以不传参,也可以传参数,还可以传 null 。

this.props.navigation.goBack(); // 回退到上一个页面
this.props.navigation.goBack(null); // 回退到任意一个页面
this.props.navigation.goBack(‘Home’); // 回退到Home页面

参考:https://www.cnblogs.com/CrazyWL/p/7283600.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值