React Native 系列(三) -- 项目结构介绍
前言
本系列是基于React Native
版本号0.44.3
写的,相信大家看了本系列前面两篇文章之后,对于React Native
的代码应该能看懂一点点了吧。本篇文章将带着大家来认识一下React Native
的项目结构。由于之前的项目被我们改动了很多,因此,这里我们重新创建一个项目。
初始化 React Native 工程
- 自动创建 iOS/Android 工程和对应的
JS
文件,index.iOS.js
,index.android.js
- 并且通过
npm
加载package.json
里面的依赖库到node_modules
文件夹中
终端执行以下命令行:
react-native init RNDemoOne --version 0.44.3
打开iOS工程,查看 Appdelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *jsCodeLocation;
// 获取js文件url
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
// 加载控件
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"RNDemoOne" initialProperties:nil launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
// 创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
// 设置窗口根控制器
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
// 显示主窗口
[self.window makeKeyAndVisible];
return YES;
}
- 加载控件方法:
(initWithBundleURL: moduleName: initialProperties: launchOptions:)
中的moduleName
不能随便写,必须跟js
中注册的模块名字一致。
查看index.ios.js
我是使用的webStorm
,webStorm代码提示
iOS程序一启动,就会去加载这个文件,去创建组件,并且把加载完的组件显示到界面
index.ios.js 实现步骤
- 因为需要用到
JSX
,所以需要加载React
模块;需要用到里面Component
组件,所以需要加载Component
。 - 加载
AppRegistry
,StyleSheet
,Text
,View
原生组件,它们都在react-native
文件夹里面。 - 自定义组件,作为程序入口组件。
- 创建样式表。
- 注册组件,程序入口,程序一启动就会自动加载注册组件。
React Native语法
我们已经创建过两个React Native
(简称RN
)项目了,可能大部分同学看RN
代码感到头疼的事情是,不知道什么时候使用{}
,什么时候使用()
。因此,我在这里为大家做个简单的总结,如果发现有不对的地方,欢迎纠正。
RN
中,使用表达式的时候用{}
包住style={styles.container}
RN
中,在字符串中使用变量的时候用{}
包住var str = "scott"
<Text>{str}</Text>
RN
中,对象,字典需要用{}
包住<View style={{flex:1}}></View>
{flex:1}
是一个字典RN
中,创建组件必须要用()
包住,因此在返回组件的时候,需要用()
render(){
return (
<View style=styles.container>
</View>
)
}
致谢
如果发现有错误的地方,欢迎各位指出,谢谢!
React Native 系列(三) -- 项目结构介绍的更多相关文章
- React Native 系列(三)
前言 本系列是基于React Native版本号0.44.3写的,相信大家看了本系列前面两篇文章之后,对于React Native的代码应该能看懂一点点了吧.本篇文章将带着大家来认识一下React N ...
- .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...
- 【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信
http://blog.csdn.net/xiaominghimi/article/details/51586492 一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解R ...
- 上门洗车APP --- Androidclient开发 之 项目结构介绍
上门洗车APP --- Androidclient开发 之 项目结构介绍 前言 尽管公司项目较紧,但还是抽空给大家继续更新. o_O"~ 欢迎大家的关注,非常高兴和大家共同学习.前面给大家分 ...
- SpringBoot项目结构介绍
一项目结构介绍 springboot框架本身对项目结构并没有特别的要求,但是按照最佳的项目结构可以帮助我们减少可能遇到的错误问题.结构如下: (1)应用主类SpringbootApplication应 ...
- React Native 学习(三)之 FlexBox 布局
React Native 学习(三)之 FlexBox 布局
- React Native 系列(九) -- Tab标签组件
前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ...
- React Native 系列(九)
前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ...
- React Native 系列(一) -- JS入门知识
前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...
随机推荐
- js 中bind
function fn(a){ this.innerHTML = a; console.log(this); } //fn("hello"); span1.onclick =fun ...
- 常见web攻击总结
搞Web开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事.本篇主要简单介绍在Web领域几种常见的攻击手段及Java Web中的预防方式. XSS SQL注入 DDOS ...
- c 存储类型
1,c语言中的存储类型(定义变量和函数的可见范围和生命周期)这些说明符放置在它们所修饰的类型之前.下面列出 C 程序中可用的存储类: auto register static extern 2,aut ...
- 如何用UPA优化性能?先读懂这份报告!
一.概述 打开一份UPA报告时,最先看到的就是概述页面,这也是我们推荐用户第一时间关注的页面.概述页面一开始会列出测试的基本信息,并根据腾讯游戏的性能标准,给出本次测试的结果(通过,不通过和警告): ...
- python全栈开发-re模块(正则表达式)应用(字符串的处理)
一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串集指定规则:该 ...
- maven入门(1-4)使用eclipse构建maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- SpringCloud的服务网关zuul
演示如何使用api网关屏蔽各服务来源 一.概念和定义 1.zuul最终还是使用Ribbon的,顺便测试一下Hystrix断路保护2.zuul也是一个EurekaClient,访问服务注册中心,获取元数 ...
- leetcode算法: Find the Difference
Given two strings s and t which consist of only lowercase letters.String t is generated by random sh ...
- mysql中的视图、事务和索引
视图: 对于一个sql查询,如果发生了修改,就需要修改sql语句. 我们可以通过定义视图来解决问题.改变需求之后就改变视图. 视图是对查询的封装 定义视图: create view 视图名称 as s ...
- python基础——继承与派生、组合
python基础--继承与派生 1 什么是继承: 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类成为基类或超累,新建的类成为派生类或子类 1.1 继承分为:单 ...