在 App 中 tab 是常见的页面类型,在 RN 里使用 react-navigation 可快速地进行 tab 配置。

假设应用有4个页面,两个是tab页面,两个是详情页面。

App.js

//应用实际场景是有redux的,这里就不删除了。不使用rudex的话,直接 return <Router />就 ok 啦!
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { PersistGate } from 'redux-persist/integration/react';
import configureStore from './store';
import Router from './router'; let store = configureStore(); export default class App extends Component {
render() {
return (
<Provider store={store.store} style={{ flex: 1 }}>
<PersistGate persistor={store.persistor}>
<Router />
</PersistGate>
</Provider>
);
}
};

router.js

import { createBottomTabNavigator, createAppContainer, createStackNavigator } from 'react-navigation';
import React from 'react';
import { Image } from 'react-native'; import Index from './view/index';
import Center from './view/center';
import Detail1 from './view/detail1';
import Detail2 from './view/detail2'; const TabNavigator = createBottomTabNavigator({
Index: {
screen: Index,
navigationOptions: {
title: '首页'
}
},
Center: {
screen: Center,
navigationOptions: {
title: '我的'
}
},
}, tabBarConfig); const AppNavigator = createStackNavigator({
Tab: TabNavigator,
Detail1: Detail1
Detail2: Detail2
}, { headerMode: 'none' });//删除每个页面的头(一般使用自定义的) export default createAppContainer(AppNavigator); const tabBarConfig = { //tab的一些配置
defaultNavigationOptions: ({ navigation }) => ({
tabBarIcon: ({ focused, horizontal, tintColor }) => {//处理tab icon
const { routeName } = navigation.state;
let iconUrl;
switch (routeName) {
case 'Center':
iconUrl = focused ? require('./assets/imgs/me-full.png') : require('./assets/imgs/me.png');
break;
default:
iconUrl = focused ? require('./assets/imgs/mv-full.png') : require('./assets/imgs/mv.png');
break;
}
return <Image source={iconUrl} style={{ width: 25, height: 25 }} />;
},
}),
tabBarOptions: {
activeTintColor: '#fd0',
inactiveTintColor: '#666',
labelStyle: {
fontSize: 14
},
style: {
backgroundColor: '#fafafa',
}
}
}

应用中,跳转非tab页面,建议使用push跳转,跳转tab建议使用navigate进行跳转。

<Text onPress={() => this.props.navigation.navigate('Center')}>跳转Center</Text>
<Text onPress={() => this.props.navigation.push('Detail1')}>跳转Detail</Text>

最新文章

  1. [LeetCode] Length of Last Word 求末尾单词的长度
  2. TCP流量控制与拥塞控制
  3. Spark on Yarn:java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost\\db_instance_name:1433;databaseName=db_name
  4. Python私有变量
  5. ***常见复杂SQL语句(含统计类SQL)
  6. ajax 跨域的几种方式
  7. PHP学习笔记(2) - 对PHP的印象
  8. 【POJ1581】A Contesting Decision(简单模拟)
  9. leetcode[55] Merge Intervals
  10. Lua C Api lua_gettable 、lua_settable 、lua_next 使用详解
  11. 体验VS2017的Live Unit Testing
  12. Ajax的简单实用实例
  13. MFC学习问题总结
  14. 基于docker/dockerfile实现redis主从复制
  15. P4099 [HEOI2013]SAO
  16. 运行wmic命令异常:java.io.IOException: Cannot run program &quot;wmic&quot;: CreateProcess error=2, ϵͳ&#213;Ҳ&#187;&#181;&#189;ָ&#182;解决记录
  17. python自学开始
  18. 协程 coroutine
  19. UFLDL 教程学习笔记(一)
  20. c语言入门经典(第5版)

热门文章

  1. nginx多层反向代理获取客户端真实ip
  2. 为什么一般hashtable的桶数会取一个素数
  3. SeetaFaceEngine2 实例
  4. 译文:A Robust and Modular Multi-Sensor Fusion ApproachApplied to MAV Navigation
  5. Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端
  6. Spring cloud微服务安全实战-4-1章节概述
  7. ES6深入浅出-7 新版的类(上集)-2.介绍JS中的类
  8. django 自定义 密码加密方式 及自定义验证方式
  9. python通过socket实现多个连接并实现ssh功能详解
  10. 迅速生成项目-react-static