前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RN项目第一节

RN项目第一节

作者头像
谦谦君子修罗刀
发布于 2018-05-02 03:00:42
发布于 2018-05-02 03:00:42
3K01
代码可运行
举报
运行总次数:1
代码可运行

一、项目说明

本项目为模仿美团的项目,采用的是网上提供的API接口。导航采用 公司推荐的react-navigation,滚动条采用第三方组件react-native-scroll-tab-view。RN环境为0.50。

(先声明!!是在网上某位大神的博客上学习哒。自己做了改进!) 原github地址:https://github.com/huanxsd/MeiTuan

样式图如下:

二、项目管理

采用WebStormgit功能来管理项目 1)在WebStorm中,选中菜单栏中的VCS,点击Enable Version Control Integration选项。

2)在弹出的弹窗中选择Git

3)接着会看见WebStrom底部弹出Version Control一栏,并且所有未加入到git的文件都已标红。此时,右击Unversion,选择Add to VCS,将文件添加到VCS中。

4)在WebStrom的右上角做提交和下载的操作

三、框架搭建

1)添加必要依赖 在命令行输入以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn add react-navigation
yarn add react-native-scrollable-tab-view

当然,以上代码可以用npm代替 打开package.json文件,会发现这两个组件已经添加到项目当中。

2)添加项目需要的图片并建立分类建立文件夹和初始文件。

建立src文件夹

  • 复制图片文件夹
  • 建立scene文件夹,用于创建各类页面的文件夹及页面
  • 建立widget文件夹,用于封装一下小的组件,比如说文字、颜色、标签栏等信息
  • 建立common文件夹,用来处理各个文件共同的样式、请求数据等功能
  • 建立初始文件RootScene
  • 建立api文件,这里存储的是需要请求数据的接口。直接提供出来。

按照上述思维导图,将文件夹和文件建立好。并将新建的文件添加到VCS中

3)设置各个主页面也就是HomeScene、MineScene、NearbyScene、OrderScene的初始状态。以HomeScene为例,粘贴一段代码。其他页面以此类推

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react';
import {
    Platform,
    StyleSheet,
    Text,
    View
} from 'react-native';


export default class HomeScene extends Component {
    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.welcome}>
                    Welcome to HomeScene!
                </Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: 'green',
    }
});
  1. 将初始页面App.js指向RootScene
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react';
import {Platform, StyleSheet, Text, View
} from 'react-native';
import RootScene from './src/RootScene'
export default class App extends Component {
  render() {
    return (
        <RootScene />
    );
  }
}

5)在RootScene页面中搭建导航,实现Tab标签栏框架

  • 引入实现导航的组件

要想让react-naviation组件发挥作用必定要引入它的子组件。StackNavigator组件用于设置导航,而TabNavigator则是用作设置标签栏,TabBarBottom用于设置标签栏的位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { StackNavigator, TabNavigator, TabBarBottom } from 'react-navigation';
  • 封装标签栏的item组件。

在widget文件夹中建立一个TabBarItem.js文件,这个小组件是为了对标签栏要显示的图做一些处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, {Component } from 'react'
import { Image } from 'react-native'
export default class TabBarItem extends Component {
    render(){
        // 设置当item选中时要展示的图片,如果图片库中有被选中的图片,则用选中的图片,否则可以把普通图片赋值给它
        let selectedImage = this.props.selectedImage?this.props.selectedImage:this.props.normalImage
        return (
            <Image
                source={this.props.focused? selectedImage:this.props.normalImage}
                style={{tintColor:this.props.tintColor,width:25,height:25}}
            />
        )
    }
}
  • 建立color组件

上文中提到,为了方便,项目中会创建出一些微小的组件。在widget中建立color.js文件。color是为了给项目设置主题颜色,边框颜色和背景颜色的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
    theme: '#06C1AE',
    border: '#e0e0e0',
    background: '#f3f3f3'
}
  • 引入需要的文件
在RootScene文件中,引入四个主界面和封装好的TabBarItem组件以及React框架必须的组件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react'
import HomeScene from './scene/Home/HomeScene'
import OrderScene from './scene/Order/OrderScene'
import NearbyScene from './scene/Nearby/NearbyScene'
import MineScene from './scene/Mine/MineScene'
  • 创建标签栏

在react-navigation这个组件中,标签栏是由TabNavigator组件创建的,将要加入到标签栏中的页面添加并设置标题、样式、图标等属性即可。这里只以Home为例。其他参考源码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//创建标签栏
const Tab = TabNavigator(
    {
        //设置标签栏四个页面
        Home: {
            screen: HomeScene,
            navigationOptions: ({ navigation }) => ({
                tabBarLabel: '团购',
                //设置标签栏的图标,需要给每一项都设置
                tabBarIcon: ({ focused, tintColor }) => (
                    //自定义封装的Item
                    <TabBarItem
                        tintColor={tintColor}
                        focused={focused}
                        normalImage={require('./img/tabbar/pfb_tabbar_homepage.png')}
                        selectedImage={require('./img/tabbar/pfb_tabbar_homepage_selected.png')}
                    />
                )
            }),
        },
          
    }

);

当然,在最后也要设置标签栏的通用属性,比如说整个标签栏的位置,是否懒加载,是否有动画,样式等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 {
        tabBarComponent: TabBarBottom,   
        tabBarPosition: 'bottom',
        swipeEnabled: true,
        animationEnabled: true,
        lazy: true,
        tabBarOptions: {
            activeTintColor: color.theme,
            inactiveTintColor: '#979797',
            style: { backgroundColor: '#ffffff' },
        },
  • 创建导航

导航和标签栏的创建方法相似,在StackNavigator里面加入要显示的页面即可。因为四个主页面都添加在Tab标签栏当中,所以只要将Tab加入到导航作为显示页面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Navigator = StackNavigator(
    {
        Tab: { screen: Tab },  //框架的页面
    },

    //设置用于适配StackNavigator的属性
    {
        navigationOptions: {
            headerBackTitle: null,
            headerTintColor: '#333333',
            showIcon: true,
        },
    }
);
  • 在render方法中返回导航
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default class RootScene extends Component {
    render() {
        return(
            <Navigator/>
        )

    }
}

效果图如下:

四、状态栏的设置 从原型图上可以看出,只有当页面跳转在’首页‘和’我的‘两个页面时,状态栏的样式是亮色,其余时候都呈现了黑色。

  • 要设置状态栏必须先导入StateBar组件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { StatusBar } from 'react-native'
  • 构造函数中,先将所有页面状态栏的状态都设置为亮色。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constructor() {
        super()
        StatusBar.setBarStyle('light-content')
    }
  • 定义一个常量,设置’首页‘和’我的‘两个页面为亮色
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 设置home和mine为的状态栏为亮色
const lightContentScenes = ['Home', 'Mine']

那么要如何确定界面展示的就是这两个页面的信息呢?这里就不得不用到路由

  • 设定一个方法,用于获取每个界面的路由。如何通过路由来设置页面状态栏的状态。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//得到路由的名称
function getCurrentRouteName(navigationState) {
    if (!navigationState) {
        return null;
    }
    const route = navigationState.routes[navigationState.index];
    // dive into nested navigators
    if (route.routes) {
        return getCurrentRouteName(route);
    }
    return route.routeName;
}

导航Navigator中有一个方法叫onNavigationStateChange,常用来追踪screen的变化。组件会给该方法传入目前的界面场景与先前的场景。

  • 用变量接受当前场景和上一个场景的路由,如果上一个场景不是当前场景,就是更换过一个场景。并且当前场景在亮色状态的数组中,就改为白色,否则改为黑色。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Navigator
                //用onNavigationStateChange来追踪screen的变化
                onNavigationStateChange={
                    //可以传props也可以不传
                     // 传入两个参数 目前的场景和前一个场景
                    (prevState, currentState) => {
                        const currentScene = getCurrentRouteName(currentState);
                        const previousScene = getCurrentRouteName(prevState);
                        //若两个场景不相等
                        if (previousScene !== currentScene) {
                            //并且目前的场景包含在数组里面
                            if (lightContentScenes.indexOf(currentScene) >= 0) {
                                // 设置为白色
                                StatusBar.setBarStyle('light-content')
                            } else {
                                // 否则设置为暗色
                                StatusBar.setBarStyle('dark-content')
                            }
                        }
                    }
                }
            />

效果图如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.04.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
为 Hive 配置 postgres 或 MySQL 作为元数据库
Hive的元数据默认使用derby作为存储DB,derby作为轻量级的DB,在开发、测试过程中使用比较方便,但是在实际的生产环境中,还需要考虑易用性、容灾、稳定性以及各种监控、运维工具等,这些都是derby缺乏的。
Lu说
2022/06/07
3.1K0
为 Hive 配置 postgres 或 MySQL 作为元数据库
大数据管理平台Ambari3.0最新版本二次开发入门实践指南
Apache Ambari项目初期旨在通过开发用于配置、管理、监控Hadoop集群的软件,使Hadoop集群管理更加简洁方便。因为Ambari灵活的插件化设计机制,现在已经广泛用于支持更多其他大数据组件的管理,用户可以根据需要自定义组件。Amabri提供直观且便于使用的Web管理界面,也提供RESTful API支持。
用户9421738
2025/04/26
2660
大数据管理平台Ambari3.0最新版本二次开发入门实践指南
Ambari部署及hdp部署的疑难问题解答汇总
以下,都是收集于网友、群友安装 ambari 或部署 hdp 集群时出现的问题,挤时间写了个疑难问题解答汇总,希望能够快速帮小伙伴们定位解决问题。觉得文章靠谱的小伙伴,希望能转发、点赞、在看三连走一波~
create17
2022/11/17
1.3K0
Ambari部署及hdp部署的疑难问题解答汇总
Ambari2.7.1安装
注:主机名修改后需要重启机器才可彻底生效。如果用户不想重启,可使用命令 hostnamectlset-hostname node1.ambari.com来修改主机名,可使用命令 hostname来检验主机名是否修改成功。这种修改方式只是暂时的,待机器重启后就恢复原样 localhost了。
create17
2018/12/12
1.8K0
Ambari2.7.1安装
离线安装HDP2.6(1)-Ambari Server
配置免密码登录,注意这里主要是指master机器登录到其它cluster机器。所以最好先给机器指定好特定的hostname标识分开,参考如下:
凡梦星尘
2024/11/20
940
Ambari2.7安装配置
下载链接: https://pan.baidu.com/s/1rlqZejpZZqio9RPzgnGOEg 提取码: j47n ;内有jdk-8u151-linux-x64.tar.gz和mysql-connector-java.jar文件。
create17
2019/03/12
1.3K0
平台安装--ambari安装
baseurl=http://192.168.199.50/ambari/centos7/
小徐
2019/08/05
3.9K0
平台安装--ambari安装
集群搭建篇(ambari+HDP)—— 全网最详细的,没有之一
1、服务器环境1.1 修改主机名称1.2 修改ip地址1.3 linux修改hosts并添加集群主机1.4 windows修改hosts文件并添加集群主机2、免密配置2.1 切换root用户2.2 生成公钥与私钥对2.3 将公钥复制到目标机器,并测试免密登录是否成功2.4 集群其他主机免密配置2.5 异常演示3、关闭防火墙3.1 防火墙设置3.2 设置之后3.3 设置之前4、禁用selinux4.1 selinux介绍4.2 设置selinux5、安装JDK5.1 上传jdk5.2 配置Java环境变量5.3 检查Java环境是否生效6、安装mysql6.1 mysql安装6.2 mysql设置6.3 修改密码6.4 上传驱动7、安装httpd服务7.1 httpd介绍7.1 安装httpd服务7.2 查看httpd服务7.3 tips:网页访问本地文件内容8、安装ntp服务8.1 ntp介绍8.2 安装8.3 修改ntp.conf配置8.4 时钟同步8.5 检查时钟同步效果9、搭建yum环境和创建ambari本地源9.1 安装yum工具9.2 安装9.3 创建repo文件9.4 分发repo文件9.4 生成本地yum源10、安装ambari10.1 在mysql中创建ambari用户和授权10.2 安装ambari10.2 初始化配置10.3 初始化ambari数据库10.4 启动ambari10.5 报错及解决10.6 ambari页面配置步骤10.6.1 第1步 启动安装10.6.2 第2步 输出集群名称10.6.3 第3步 选择版本、选择本地仓库及路径10.6.4 第4步 输入集群节点名称、私钥10.6.5 节点认证10.6.6 选择服务10.6.7 分配主节点10.6.8 分配从节点和客户端10.6.9 自定义服务10.6.10 确认配置10.6.11 安装部署11、启动服务11.1 java权限问题11.2 hive元数据初始化
大数据最后一公里
2021/08/05
2.7K0
集群搭建篇(ambari+HDP)—— 全网最详细的,没有之一
OushuDB入门(一)——安装篇
OushuDB是由Apache HAWQ创始团队基于HAWQ打造的新一代数据仓库(New Data Warehouse)。该产品采用了存储与计算分离技术架构,具有MPP的所有优点,还具有弹性,支持混合工作负载和高扩展性等优点。作为HAWQ的增强版,OushuDB遵循ANSI-SQL标准,兼容Oracle、Greenplum Database和PostgreSQL,提供PB级数据交互式查询能力,提供对主要BI工具的描述性分析和AI支持。
用户1148526
2019/05/25
1.6K0
【流水】使用Ambari搭建Hadoop平台
手动安装Hadoop的朋友都知道,这是一个痛苦的过程。一天时间,你能够把上千台机器全部安装完成么?包括Hive、Spark、Hbase等。
xjjdog
2019/09/24
1.4K0
【流水】使用Ambari搭建Hadoop平台
大数据环境搭建-Ambari图形化环境配置工具
https://www.psvmc.cn/article/2022-03-31-bigdata-environment.html
码客说
2022/04/27
8810
HiveServer2因JDBC版本引起的问题
之前一直都是用HDP来搭建和管理Hadoop环境,在安装完成调试时也未曾出现过棘手的问题,但这次在Centos6x系统上布署好后却是遇到奇怪的问题:
凡梦星尘
2024/11/20
1590
Ambari2.7整体编译+安装使用
出错的Java文件编码和CheckStyle设置的编码不同。CheckStyle里设置的编码是UTF-8
create17
2018/12/20
4.8K0
Ambari2.7整体编译+安装使用
ambari安装
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
Dlimeng
2023/06/29
4380
ambari安装
Ambari EDP 大数据集群部署手册
链接:https://pan.baidu.com/s/1M5SAVrL1DIy-dprE0g4OGA?pwd=b8hu
create17
2025/03/23
2780
Ambari EDP 大数据集群部署手册
如何在Redhat7.4安装HDP3.0.1
7月13日,Hortonworks在其官网宣布发布HDP3.0,相关介绍可以参考Fayson昨天的文章《Hortonworks正式发布HDP3.0》,最近又更新到了HDP3.0.1。本文档Fayson主要描述如何在Redhat7.4安装HDP3.0.1。HDP与CDH的安装步骤一致,主要包括以下四部分:
Fayson
2018/11/16
3.2K0
EDP 发布新组件时,如何进行增量安装?
最近 EDP 新增了 kudu 组件,对于已经部署了 EDP 的同学们,如何使用 EDP 安装 kudu 组件,本文做一个说明。后续 EDP 会继续集成新的组件,大家可以参考此文档使用 EDP 继续安装新组件。
create17
2025/03/17
900
EDP 发布新组件时,如何进行增量安装?
007.基于CentOS7.8安装Ambari2.7+HDP3.1大数据平台
我这里创建了一个普通用户名为admin,并且具有sudo权限,4个节点都需要有这个用户。
CoderJed
2020/10/30
2.3K1
007.基于CentOS7.8安装Ambari2.7+HDP3.1大数据平台
CentOS7下利用Ambari搭建HDP大数据平台
Apache Ambari是一个基于Web的支持Apache Hadoop集群的供应、管理和监控的开源工具, Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。提供Web UI进行可视化的集群管理,简化了大数据平台的安装、使用难度。
yuanfan2012
2020/09/01
3.3K0
【大数据搭建HDP3.x】Ambari2.7.4+HDP3.1.4离线搭建教程(上)
上篇分享HDP3.1.4对照2.6.x的新特性,本篇文字整体分享下HDP3.1.4+Ambari2.7.4集群部署。各位看官走着~
知否大数据
2022/06/17
2.6K0
相关推荐
为 Hive 配置 postgres 或 MySQL 作为元数据库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档