React Native填坑之旅 -- 使用react-navigation代替Navigator
一句话概括的话,
我会在下文里主要介绍 Stack Navigator在 react-native init AwesomeProject 命令后生成的默认项目里,查看index.js文件: import { AppRegistry } from 'react-native'; import App from './App'; AppRegistry.registerComponent('AwesomeProject',() => App); APP开始执行后运行的就是 在App.js文件中,去掉 下面看下如何配置。 最简单的: export default NavHome = StackNavigator({ Home: { screen: NavApp,},Message: { screen: MessageContainer,}) 导出 修改App.js文件的内容。在其中添加一个按钮,点击之后可以进入到 //App.js <Button onPress={this.props.navigation.navigate('Message')} title={'To message'} /> //MessageContainer.js <Button onPress={this.props.navigation.goBack()} title={'Go Back'} /> 但是,这样还是demo的水平,离真正的产品级使用还差很多。一般的App,在push到下一个页面的时候会点击navigation bar的回退按钮返回上一页。我们就来实现这个功能。 使我们首先看一下 StackNavigator(RouteConfigs,StackNavigatorConfig) 通过查看文档,要实现这个功能需要在 export default NavHome = StackNavigator({ Home: { screen: App,navigationOptions: ({navigation}) => ({ title: 'Home',headerLeft: (<Button onPress={() => navigation.navigate('DrawerToggle')} title={'User'} />),headerRight: (<Button onPress={() => navigation.navigate('Message')} title={'Message'} />),}) },navigationOptions: ({navigation}) => ({ title: "Message",headerLeft: (<Button title='Back' onPress={() => {navigation.goBack();}} />) }) },}); 详细看一下
在 这样,这个靠谱的导航就完成了。 Drawer Navigator
const NavApp = DrawerNavigator({ Home: { screen: App,MyWallet: { screen: MyWalletView,MyVoucher: { screen: MyVoucherView,} }); 这个时候看起来是这样的:
但是我想要的效果是这样的:
显然,文档里提供的一些简单的定制是不能完成这样的效果的。于是,我们查看文档,发现有办法直接替换掉默认的Drawer实现,非常简单: const NavApp = DrawerNavigator({ Home: { screen: App,User: { screen: UserContainer,} },{ contentComponent: props => (<UserDrawer items={props} />) }) 看下API: DrawerNavigator(RouteConfigs,DrawerNavigatorConfig) 只要叫上 { contentComponent: props => (<UserDrawer items={props} />) }
这样我们想要的抽屉式菜单就实现了。 StackNavigator和DrawerNavigator结合使用现在把这两个组件结合在一起使用。在首页上的导航栏里的两个按钮,左侧的开启drawer导航,右侧的是“message”按钮,使用StackNavigator组件导航。 如果是在drawer导航里使用 export default NavHome = StackNavigator({ Home: { screen: NavApp,}); export default NavApp = DrawerNavigator({ Home: { screen: NavHome,// *** },{ contentComponent: props => (<UserDrawer items={props} />) }) 要在Drawer导航里用stack导航,那么就在drawer导航里的某个路由选项里加上 但是在使用上还是有一点区别的。如果drawer导航里包含stack导航。那么drawer导航菜单的最高点是在屏幕的最高点。反之,如果drawer导航被stack导航包含的话,drawer导航菜单的最高点是在导航栏的下方的。如图:
回到正题。从drawer导航菜单跳转到任何的页面后如何跳转回来呢?还是老方法: export default class MyWalletView extends React.Component { render() { return ( <TouchableOpacity style={{ flex: 1,justifyContent: 'center',alignItems: 'center' }} onPress={() => this.props.navigation.goBack()}> <Text>{'My Wallet'}</Text> </TouchableOpacity> ); } } 调用props传入的navigation的方法来实现返回: this.props.navigation.goBack() 总结更多请看代码吧。留下来
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flex 折线图 (类似主机一系统CPU使用记录)
- ruby-on-rails – 将安全密码/密钥放在rails应用程序中的位
- nosql – Cassandra – 使用主键列的任意子集按主键搜索
- dojo小例子(17)iframe上传文件到rest后台,以及乱码问题解
- Swift入门(十二)——利用Extension添加逆序输出字符串方法
- ruby-on-rails – Rails:Cookie溢出omniauth twitter注册
- Oracle中sys和system的区别小结
- c# – 远程服务器返回错误:(500)内部服务器错误
- flash – Actionscript错误#2044:未处理的SecurityErrorEv
- XML网络中的配置文件更改为本地读取
- 查询oracle多维数据集时出现java.sql.SqlRecover
- QT 使用jsoncpp
- about Redefinition of sqlite3 as different ki
- react native学习笔记15——Picker、Switch、Sli
- 在PostgreSQL中更改系统和错误消息的语言
- postgresql – 返回给定表的动态列集的函数
- 【前端背景UI】鼠标磁性动态蜘蛛网背景源码
- oracle – 有没有办法使用Hibernate的Criteria A
- DWR(AJAX)+Highcharts绘制曲线图,饼图
- ruby-on-rails-3 – Sporadic 400错误请求错误ng