React Native商城项目实战04 - 封装TabNavigator.Item的创建
1.Main.js
- /**
- * 主页面
- */
- import React, { Component } from 'react';
- import {
- StyleSheet,
- Text,
- View,
- Image,
- Platform, //判断当前运行的系统
- } from 'react-native';
- /*=============导入外部组件类==============*/
- import TabNavigator from 'react-native-tab-navigator';
- import CustomerComponents, { Navigator } from 'react-native-deprecated-custom-components';
- // 引入外部的组件(此处注意是相当于了项目根目录)
- var Home = require('../Component/Home');
- var Message = require('../Component/Message');
- var Find = require('../Component/Find');
- var Mine = require('../Component/Mine');
- // ES5
- var Main = React.createClass({
- // 初始化函数(变量是可以改变的,充当状态机的角色)
- getInitialState(){
- return{
- selectedTab:'home' // 默认选中的tabBar
- }
- },
- render() {
- return (
- <TabNavigator>
- {/*--首页--*/}
- {this.renderTabBarItem('首页','icon_tabbar_home','icon_tabbar_home_selected','home','首页',Home,1)}
- {/*--消息--*/}
- {this.renderTabBarItem('消息','icon_tabbar_message','icon_tabbar_message_selected','message','消息',Message,2)}
- {/*--发现--*/}
- {this.renderTabBarItem('发现','icon_tabbar_find','icon_tabbar_find_selected','find','发现',Find)}
- {/*--我的--*/}
- {this.renderTabBarItem('我的','icon_tabbar_mine','icon_tabbar_mine_selected','mine','我的',Mine)}
- </TabNavigator>
- );
- },
- // 封装tabBarItem
- renderTabBarItem(title,iconName,selectedIconName,selectedTab,componentName,component,badgeText){
- return(
- <TabNavigator.Item
- title={title}
- renderIcon={() => <Image source={{uri:iconName}} style={styles.iconStyle} />}
- renderSelectedIcon={() => <Image source={{uri:selectedIconName}} style={styles.iconStyle} />}
- selected={this.state.selectedTab === selectedTab}
- onPress={() => this.setState({ selectedTab: selectedTab })}
- selectedTitleStyle={styles.selectedTitleStyle} //tabBarItem选中的文字样式
- badgeText={badgeText}
- >
- <Navigator
- initialRoute={{name: componentName, component:component}}
- configureScene={()=>{
- return Navigator.SceneConfigs.PushFromRight;
- }}
- renderScene={(route, navigator) =>{
- let Component = route.component;
- return <Component {...route.passProps} navigator={navigator} />
- }}
- />
- </TabNavigator.Item>
- )
- }
- });
- const styles = StyleSheet.create({
- // icon默认样式
- iconStyle:{
- width: Platform.OS === 'ios' ? 30 : 25,
- height:Platform.OS === 'ios' ? 30 : 25,
- },
- // tabBarItem选中的文字样式
- selectedTitleStyle:{
- color: 'rgba(212,97,0,1)',
- }
- });
- // 输出
- module.exports = Main;
简化代码
2.Home.js
- /**
- * 首页
- */
- import React, { Component } from 'react';
- import {
- AppRegistry,
- StyleSheet,
- Text,
- View,
- Image,
- TouchableOpacity,
- Platform
- } from 'react-native';
- var Home = React.createClass({
- render() {
- return (
- <View style={styles.container}>
- {/*导航条*/}
- {this.renderNavBar()}
- <Text style={styles.welcome}>
- 首页
- </Text>
- </View>
- );
- },
- // 导航条
- renderNavBar(){
- return(
- <View style={styles.navOutViewStyle}>
- <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>首页</Text>
- </View>
- )
- }
- });
- const styles = StyleSheet.create({
- // 导航条视图
- navOutViewStyle:{
- height:Platform.OS === 'ios' ? 64 : 44,
- backgroundColor:'#468AFF',
- // 主轴方向
- flexDirection:'row',
- // 侧轴对齐方式 垂直居中
- alignItems:'center',
- // 主轴方向居中
- justifyContent:'center',
- },
- container: {
- flex: 1,
- backgroundColor: '#F5FCFF',
- },
- welcome: {
- fontSize: 20,
- textAlign: 'center',
- margin: 10,
- },
- });
- // 输出类
- module.exports = Home;
3.Message.js
- /**
- * 消息
- */
- import React, { Component } from 'react';
- import {
- AppRegistry,
- StyleSheet,
- Text,
- View,
- Image,
- TouchableOpacity,
- Platform
- } from 'react-native';
- var Message = React.createClass({
- render() {
- return (
- <View style={styles.container}>
- {/*导航条*/}
- {this.renderNavBar()}
- <Text style={styles.welcome}>
- 消息
- </Text>
- </View>
- );
- },
- // 导航条
- renderNavBar(){
- return(
- <View style={styles.navOutViewStyle}>
- <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>消息</Text>
- </View>
- )
- }
- });
- const styles = StyleSheet.create({
- // 导航条视图
- navOutViewStyle:{
- height:Platform.OS === 'ios' ? 64 : 44,
- backgroundColor:'#468AFF',
- // 主轴方向
- flexDirection:'row',
- // 侧轴对齐方式 垂直居中
- alignItems:'center',
- // 主轴方向居中
- justifyContent:'center',
- },
- container: {
- flex: 1,
- backgroundColor: '#F5FCFF',
- },
- welcome: {
- fontSize: 20,
- textAlign: 'center',
- margin: 10,
- },
- });
- // 输出类
- module.exports = Message;
4.Find.js
- /**
- * 发现
- */
- import React, { Component } from 'react';
- import {
- AppRegistry,
- StyleSheet,
- Text,
- View,
- Image,
- TouchableOpacity,
- Platform
- } from 'react-native';
- var Find = React.createClass({
- render() {
- return (
- <View style={styles.container}>
- {/*导航条*/}
- {this.renderNavBar()}
- <Text style={styles.welcome}>
- 发现
- </Text>
- </View>
- );
- },
- // 导航条
- renderNavBar(){
- return(
- <View style={styles.navOutViewStyle}>
- <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>发现</Text>
- </View>
- )
- }
- });
- const styles = StyleSheet.create({
- // 导航条视图
- navOutViewStyle:{
- height:Platform.OS === 'ios' ? 64 : 44,
- backgroundColor:'#468AFF',
- // 主轴方向
- flexDirection:'row',
- // 侧轴对齐方式 垂直居中
- alignItems:'center',
- // 主轴方向居中
- justifyContent:'center',
- },
- container: {
- flex: 1,
- backgroundColor: '#F5FCFF',
- },
- welcome: {
- fontSize: 20,
- textAlign: 'center',
- margin: 10,
- },
- });
- // 输出类
- module.exports = Find;
5.Mine.js
- /**
- * 我
- */
- import React, { Component } from 'react';
- import {
- AppRegistry,
- StyleSheet,
- Text,
- View,
- Image,
- TouchableOpacity,
- Platform
- } from 'react-native';
- var Mine = React.createClass({
- render() {
- return (
- <View style={styles.container}>
- {/*导航条*/}
- {this.renderNavBar()}
- <Text style={styles.welcome}>
- 我的
- </Text>
- </View>
- );
- },
- // 导航条
- renderNavBar(){
- return(
- <View style={styles.navOutViewStyle}>
- <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>我的</Text>
- </View>
- )
- }
- });
- const styles = StyleSheet.create({
- // 导航条视图
- navOutViewStyle:{
- height:Platform.OS === 'ios' ? 64 : 44,
- backgroundColor:'#468AFF',
- // 主轴方向
- flexDirection:'row',
- // 侧轴对齐方式 垂直居中
- alignItems:'center',
- // 主轴方向居中
- justifyContent:'center',
- },
- container: {
- flex: 1,
- backgroundColor: '#F5FCFF',
- },
- welcome: {
- fontSize: 20,
- textAlign: 'center',
- margin: 10,
- },
- });
- // 输出类
- module.exports = Mine;
6.效果图
React Native商城项目实战04 - 封装TabNavigator.Item的创建的更多相关文章
- React Native商城项目实战02 - 主要框架部分(tabBar)
1.安装插件,cd到项目根目录下执行: $ npm i react-native-tab-navigator --save 2.主框架文件Main.js /** * 主页面 */ import Rea ...
- React Native商城项目实战03 - 包装Navigator
1.在Home目录下新建首页详细页HomeDetail.js /** * 首页详情页 */ import React, { Component } from 'react'; import { App ...
- React Native商城项目实战01 - 初始化设置
1.创建项目 $ react-native init BuyDemo 2.导入图片资源 安卓:把文件夹放到/android/app/src/main/res/目录下,如图: iOS: Xcode打开工 ...
- React Native商城项目实战11 - 个人中心头部内容
1.创建MineHeaderView.js /** * 个人中心头部内容 */ import React, { Component } from 'react'; import { AppRegist ...
- React Native商城项目实战10 - 个人中心中间内容设置
1.新建一个MineMiddleView.js,专门用于构建中间的内容 /** * 个人中心中间内容设置 */ import React, { Component } from 'react'; im ...
- React Native商城项目实战07 - 设置“More”界面导航条
1.More/More.js /** * 更多 */ import React, { Component } from 'react'; import { AppRegistry, StyleShee ...
- React Native商城项目实战05 - 设置首页的导航条
1.Home.js /** * 首页 */ import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Te ...
- React Native商城项目实战06 - 设置安卓中的启动页
1.Main 目录下新建LaunchImage.js: /** * 启动页 */ import React, { Component } from 'react'; import { AppRegis ...
- React Native商城项目实战16 - 购物中心详细页
逻辑分析: 首页(Home)加载的购物中心组件(ShopCenter),传递url数据: ShopCenter里根据url加载购物中心详细页组件(ShopCenterDetail), ShopCent ...
随机推荐
- Python 经典面试题(一)
一.浮点数运算 题目 判断浮点数的运行结果是否相等: a = 0.1 b = 0.2 c = 0.3 assert a + b == c 题目解析: 本题考查的是计算机的浮点运算知识点.不仅是 py ...
- 运维LVS-NAT模式理解
一.LVS-NAT模式的工作原理这个是通过网络地址转换的方法来实现调度的.首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个 后端的真实服务器(RS ...
- css3 加载动画
代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- sqlite3中 timestamp使用
timestamp使用 一. timestamp两种属性:自动初始化: 此行为只在第一次写入数据时,怎么把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)自动更新: 此行为在 ...
- xcode中进行git代码管理
http://www.cocoachina.com/ios/20140524/8536.html
- 【leetcode 476】. Number Complement
给定一个正整数,输出其补码. 思路:利用mask掩码进行异或, 利用 temp >> 1 大于0 来决定mask长度,求出的mask 为二进制 1 0 0 0 0类型, ...
- Spring Boot自定义Redis缓存配置,保存value格式JSON字符串
Spring Boot自定义Redis缓存,保存格式JSON字符串 部分内容转自 https://blog.csdn.net/caojidasabi/article/details/83059642 ...
- web框架-(七)Django补充---models进阶操作及modelform操作
通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...
- Elasticsearch:hanlp 中文分词器
HanLP 中文分词器是一个开源的分词器,是专为Elasticsearch而设计的.它是基于HanLP,并提供了HanLP中大部分的分词方式.它的源码位于: https://github.com/Ke ...
- rediscli命令
一.rediscli xxx 发送命令 二.进入客户端后的命令