博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react-navigation跨tab路由处理
阅读量:4085 次
发布时间:2019-05-25

本文共 5372 字,大约阅读时间需要 17 分钟。

一般应用都有跨tab跳转的需求, 这就需要特别处理下路由. 下面是使用react-navigation作为路由组件的一种方式.http://www.bijishequ.com/detail/369321

具体情境是: app分三大模块Home主页, Bill账单和Me我的, 对应三个tab. 现在需求是 Home push HomeTwoHomeTwopush BillTwoBillTwo 返回到 Bill账单首页.

首先选择路由结构, 选择使用最外层是StackNavigator, 然后包含3个TabNavigator和其他组件.

const Components = {    HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },    HomeThree: { screen: HomeThree, path:'app/HomeThree' },    BillTwo: { screen: BillTwo, path:'app/BillTwo' },    BillThree: { screen: BillThree, path:'app/BillThree' },}const Tabs = TabNavigator({     Home: {         screen: Home,         path:'app/home',         navigationOptions: {              tabBar: {                 label: '首页',                 icon: ({tintColor}) => (),             },         }     },     Bill: {         screen: Bill,         path:'app/bill',         navigationOptions: {             tabBar: {                 label: '账单',                 icon: ({tintColor}) => (),             },         }     },     Me: {         screen: Me,         path:'app/me',         navigationOptions: {             tabBar: {                 label: '我',                 icon: ({tintColor}) => (),             },         }     }   }, {       tabBarPosition: 'bottom',        swipeEnabled: false,       animationEnabled: false,        lazyLoad: false,        backBehavior: 'none',        tabBarOptions: {           activeTintColor: '#ff8500',            inactiveTintColor: '#999',           showIcon: true,            indicatorStyle: {               height: 0             },           style: {               backgroundColor: '#fff',            },           labelStyle: {               fontSize: 10,            },       }, }); const Navs = StackNavigator({     Home: { screen: Tabs, path:'app/Home' },     Bill: { screen: Tabs, path:'app/Bill' },     Me: { screen: Tabs, path:'app/Me' },     ...Components }, {        initialRouteName: 'Home',         navigationOptions: {             header: {                  style: {                    backgroundColor: '#fff'                },                titleStyle: {                    color: 'green'                }            },            cardStack: {                 gesturesEnabled: true            }        },        mode: 'card',          headerMode: 'screen' });

HomeTwo里使用react-navigation自带的reset action就可以重置路由信息了:

// push BillTwothis.props.navigation.dispatch(resetAction);// 使用reset action重置路由const resetAction = NavigationActions.reset({    index: 1,  // 注意不要越界    actions: [  // 栈里的路由信息会从 Home->HomeTwo 变成了 Bill->BillTwo        NavigationActions.navigate({ routeName: 'Bill'}),        NavigationActions.navigate({ routeName: 'BillTwo'})    ]});

HomeTwo push 到 BillTwo页面后, 点击BillTwo的左上角导航按钮返回就能返回到Bill账单首页了.

http://www.bijishequ.com/detail/369321

具体情境是: app分三大模块Home主页, Bill账单和Me我的, 对应三个tab. 现在需求是 Home push HomeTwoHomeTwopush BillTwoBillTwo 返回到 Bill账单首页.

首先选择路由结构, 选择使用最外层是StackNavigator, 然后包含3个TabNavigator和其他组件.

const Components = {    HomeTwo: { screen: HomeTwo, path:'app/HomeTwo' },    HomeThree: { screen: HomeThree, path:'app/HomeThree' },    BillTwo: { screen: BillTwo, path:'app/BillTwo' },    BillThree: { screen: BillThree, path:'app/BillThree' },}const Tabs = TabNavigator({     Home: {         screen: Home,         path:'app/home',         navigationOptions: {              tabBar: {                 label: '首页',                 icon: ({tintColor}) => (),             },         }     },     Bill: {         screen: Bill,         path:'app/bill',         navigationOptions: {             tabBar: {                 label: '账单',                 icon: ({tintColor}) => (),             },         }     },     Me: {         screen: Me,         path:'app/me',         navigationOptions: {             tabBar: {                 label: '我',                 icon: ({tintColor}) => (),             },         }     }   }, {       tabBarPosition: 'bottom',        swipeEnabled: false,       animationEnabled: false,        lazyLoad: false,        backBehavior: 'none',        tabBarOptions: {           activeTintColor: '#ff8500',            inactiveTintColor: '#999',           showIcon: true,            indicatorStyle: {               height: 0             },           style: {               backgroundColor: '#fff',            },           labelStyle: {               fontSize: 10,            },       }, }); const Navs = StackNavigator({     Home: { screen: Tabs, path:'app/Home' },     Bill: { screen: Tabs, path:'app/Bill' },     Me: { screen: Tabs, path:'app/Me' },     ...Components }, {        initialRouteName: 'Home',         navigationOptions: {             header: {                  style: {                    backgroundColor: '#fff'                },                titleStyle: {                    color: 'green'                }            },            cardStack: {                 gesturesEnabled: true            }        },        mode: 'card',          headerMode: 'screen' });

HomeTwo里使用react-navigation自带的reset action就可以重置路由信息了:

// push BillTwothis.props.navigation.dispatch(resetAction);// 使用reset action重置路由const resetAction = NavigationActions.reset({    index: 1,  // 注意不要越界    actions: [  // 栈里的路由信息会从 Home->HomeTwo 变成了 Bill->BillTwo        NavigationActions.navigate({ routeName: 'Bill'}),        NavigationActions.navigate({ routeName: 'BillTwo'})    ]});

HomeTwo push 到 BillTwo页面后, 点击BillTwo的左上角导航按钮返回就能返回到Bill账单首页了.

转载地址:http://owrni.baihongyu.com/

你可能感兴趣的文章
属性字符串(富文本)的使用
查看>>
GPS定位
查看>>
地图、显示用户位置、大头针
查看>>
自定义大头针
查看>>
UIButton添加block点击事件
查看>>
利用runtime给类别添加属性
查看>>
本地推送
查看>>
FMDB的使用
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
TableDnd(JQuery表格拖拽控件)应用进阶
查看>>
[转]开源中最好的Web开发的资源
查看>>
java接口不能实例化原因浅谈
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
Java8 Lambda表达式介绍
查看>>