官方推荐react-navigation的具体使用详解

看了官方文档的导航器对比,发现现在主推的方案是一个单独的导航库react-navigation,据说它的使用十分简单。我就写个demo,试了一下。

一、主要构成

按使用形式主要分三部分:

  1. StackNavigator: 类似于普通的Navigator,屏幕上方导航栏
  2. TabNavigator: 相当于ios里面的TabBarController,屏幕下方的标签
  3. DrawerNavigator: 抽屉效果,侧边滑出

二、使用

1.新建项目

rush:js;"> react-native init ComponentDemo

2. 在应用中安装此库

rush:bash;"> npm install --save react-navigation

安装完发现是beta版本(v1.0.0-beta.7) ,竟然有坑?!一会儿我们会详细说这个坑~

3.测试TabNavigator、StackNavigator和DrawerNavigator

(1)新建HomePage.js

rush:js;"> import React from 'react'; import { StyleSheet,View,Text,Button,Image } from 'react-native';

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

import ChatScreen from './ChatScreen';
import minePage from './minePage';

class HomePage extends React.Component{

static navigationoptions={
title: '首页',//设置标题内容
header:{
backTitle: ' ',//返回按钮标题内容认为上一级标题内容
}
}

constructor(props) {
super(props);
}

render() {
const {navigate} = this.props.navigation;
return (

Hello,Navigation!

(2)新建ChatScreen.js

rush:js;"> import React from 'react'; import { Button,Image,Text } from 'react-native';

class ChatScreen extends React.Component {
static navigationoptions = {
title:'聊天',};

render() {
const {params} = this.props.navigation.state;
return (
<View style={{backgroundColor:'#fff',flex:1}}>

Chat with {params.user}
</View>

);

}
}
export default ChatScreen;

(3)新建minePage.js

import {
DrawerNavigator
} from 'react-navigation';

import MyNotificationsScreen from './MyNotificationsScreen';

class MinePage extends Component{
static navigationOptions = {
title:'我的',drawerLabel: '我的',// Note: By default the icon is only shown on iOS. Search the showIcon option below.
drawerIcon: ({ tintColor }) => (
<Image
source={require('./image/chat@3x.png')}
style={[styles.icon,{tintColor: tintColor}]}
/>
),};
render(){;
return(
<View style={{backgroundColor:'#fff',flex:1}}>

Sybil

(4)编写MyNotificationsScreen.js

class MyNotificationsScreen extends React.Component {
static navigationOptions = {
title:'通知',drawerLabel: '通知',drawerIcon: ({ tintColor }) => (
<Image
source={require('./image/notif@3x.png')}
style={[styles.tabIcon,{tintColor: tintColor}]}
/>
),};

render() {
return (
<View style={{backgroundColor:'#fff'}}>
<Button
style={{padding:20}}
onPress={() => this.props.navigation.navigate('DrawerOpen')}
title="点击打开侧滑菜单"
/>
<Button
onPress={() => this.props.navigation.goBack()}
title="返回我的界面"
/>

); } }

const styles = StyleSheet.create({
tabIcon: {
width: 24,});

export default MyNotificationsScreen;

(5)运行

报错啦?这就是上面我们所说的坑~

什么原因呢?原来是测试版的bug,在目录中找到node_modules/react-navigation/src/views/Header.js的第12行,删除它就OK了~

Ps:遗憾的是这个错误我没有留图啊~在我即将发表这篇文章的时候,最新版已经变为(v1.0.0-beta.9)了,最新版已经将上述的bug修改了!

好了,再次运行~

一个动态效果图:

想详细了解React Navigation,可以阅读这一篇英文的入门文档,希望对你们有所帮助~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...