深入浅出React Native 3: 从零开始写一个Hello World
这是深入浅出React Native的第三篇文章。
将index.ios.js中的代码全部删掉,为什么要删掉呢?因为我们准备从零开始写一个应用~学习技术最好的方式就是自己动手写,看别人的代码一百遍的效果也不如自己写一遍来的效果大~
我们要做的事情主要分成以下两步:
1. 创建组件
2. 将创建好的组件显示在app上
打开index.ios.js文件,输入
var HelloWorld = React.createClass({
render: function () {
return (
<View>
<Text>
Hello World
</Text>
</View>
)
}
});
查找React文档可以看到该createClass的描述
ReactClass createClass(object specification)
通过传入一个描述说明(specification)来创建一个组件类,创建的这个组件类必须实现render这个方法,并且render方法只能返回一个节点,当然该节点可以包含任意多的子节点。
像上面我们创建了一个HelloWorld的组件类,该类实现了render这个方法,该方法只返回<View>这个子节点,当然,在<View>这个节点下还包含了<Text>这个节点。
第一步就完成了,你看,就是这么简单~
下面我们开始第二步。
AppRegistry.registerComponent('AwesomeProject', function() {
return HelloWorld;
});
AppRegistry是运行React Native的应用程序的一个入口,一个应用程序的根组件必须通过调用AppRegistry.registerComponent方法将自己注册到应用中,这样原生系统才能正确加载并通过调用AppRegistry.runApplication来运行应用程序。
在我们的项目中,根组件就是我们的HelloWorld,至于第一个参数为什么是AwesomeProject,参看api可以看到
static registerComponent(appKey: string, getComponentFunc: ComponentProvider)
第一个参数指的是appKey,如果大家还记得的话,我们通过react native命令行生成的项目模板的名字就叫做Awesome~当然这个名字可以改的,至于怎么改,我们以后再说,现在先保持这个名字。
这两件事情做完以后,切换回模拟器,CMD+R刷新(注意,服务器要保持运行状态哦~如果服务器停掉的话,npm start命令,还记得吗~不记得的话请翻看之前的教程哦),咦,怎么神马都没有~当然,也可能界面上出现一大片红色的错误信息~~
打开xcode可以看到其中有一段这样的错误:

系统找不到我们使用的React变量,所以报错了~其实不仅仅React我们没有定义,AppRegistry, View, Text我们都没有定义~所以下面我们要讲React Native定义的这些变量引入~
在index.ios.js文件的最上面添加下述代码~
var React = require('react-native');
var AppRegistry = React.AppRegistry;
var View = React.View;
var Text = React.Text;
因为AppRegistry, View, Text是React的一个属性,所以引入方式与React不同~
打开模拟器,CMD+R刷新下,就可以看到hello world显示在界面上啦~只是......位置有点点尴尬。

为了让这个显示在中间,我们为其添加一些style~
第一步需要引入StyleSheet变量。在引入变量的最后添加下面的代码:
var StyleSheet = React.StyleSheet;
然后在AppRegistry.registerComponent方法的上面(其实位置无所谓,只需要在引入变量的下面就可以了,之所以写在registerComponent前面,只是为了代码看起来好看些~),添加
var styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center'
}
});
我们会在后续讲解StyleSheet,现在只需要知道,StyleSheet是一种样式的抽象,类似于CSS。在上述的style中,我们将container定义为水平、垂直居中。
修改HelloWorld组件,为其添加我们设置的样式。
var HelloWorld = React.createClass({
render: function () {
return (
<View style={styles.container}>
<Text>
Hello World
</Text>
</View>
)
}
});
大功告成~在模拟器上刷新,就可以看到Hello World这几个字显示在iphone的中间啦~

深入浅出React Native 3: 从零开始写一个Hello World的更多相关文章
- 深入浅出 React Native:使用 JavaScript 构建原生应用
深入浅出 React Native:使用 JavaScript 构建原生应用 链接:https://zhuanlan.zhihu.com/p/19996445 原文:Introducing React ...
- 深入浅出React Native 2: 我的第一个应用
这是深入浅出React Native教程的第二篇文章. 1. 环境配置 React Native环境配好之后,就可以开始创建我们的第一个App啦. 打开控制台,输入 react-native init ...
- 一起学习造轮子(三):从零开始写一个React-Redux
本文是一起学习造轮子系列的第三篇,本篇我们将从零开始写一个React-Redux,本系列文章将会选取一些前端比较经典的轮子进行源码分析,并且从零开始逐步实现,本系列将会学习Promises/A+,Re ...
- 从零开始写一个武侠冒险游戏-8-用GPU提升性能(3)
从零开始写一个武侠冒险游戏-8-用GPU提升性能(3) ----解决因绘制雷达图导致的帧速下降问题 作者:FreeBlues 修订记录 2016.06.23 初稿完成. 2016.08.07 增加对 ...
- 从零开始写一个武侠冒险游戏-7-用GPU提升性能(2)
从零开始写一个武侠冒险游戏-7-用GPU提升性能(2) ----把地图处理放在GPU上 作者:FreeBlues 修订记录 2016.06.21 初稿完成. 2016.08.06 增加对 XCode ...
- 从零开始写一个武侠冒险游戏-6-用GPU提升性能(1)
从零开始写一个武侠冒险游戏-6-用GPU提升性能(1) ----把帧动画的实现放在GPU上 作者:FreeBlues 修订记录 2016.06.19 初稿完成. 2016.08.05 增加对 XCod ...
- 从零开始写一个Tomcat(叁)--请求解析
挖坑挖了这么长时间也该继续填坑了,上文书讲到从零开始写一个Tomcat(贰)--建立动态服务器,讲了如何让服务器解析请求,分离servlet请求和静态资源请求,读取静态资源文件输出或是通过URLCla ...
- 一起学习造轮子(二):从零开始写一个Redux
本文是一起学习造轮子系列的第二篇,本篇我们将从零开始写一个小巧完整的Redux,本系列文章将会选取一些前端比较经典的轮子进行源码分析,并且从零开始逐步实现,本系列将会学习Promises/A+,Red ...
- 一起学习造轮子(一):从零开始写一个符合Promises/A+规范的promise
本文是一起学习造轮子系列的第一篇,本篇我们将从零开始写一个符合Promises/A+规范的promise,本系列文章将会选取一些前端比较经典的轮子进行源码分析,并且从零开始逐步实现,本系列将会学习Pr ...
随机推荐
- 关于大小型项目如何最大限度提高WebAPi性能
前言 WebAPi作为接口请求的一种服务,当我们请求该服务时我们目标是需要快速获取该服务的数据响应,这种情况在大型项目中尤为常见,此时迫切需要提高WebAPi的响应机制,当然也少不了前端需要作出的努力 ...
- CSS3制作心形头像
1.功能需求: 最近有一个基于微信开发的Mobile Web项目,是一个活动页面.功能需求:用户使用微信扫描二维码,然后授权使用微信登录,然后读取用户的昵称和头像,然后显示在一个饼图上面.头像需要有一 ...
- JS查看Object对象的内容
以一个例子来说,下面是他的Object: JS: 如果想直接获取到total的值,那就先把获取到的Json先Eval(),然后json.total就能取到total的值了, 但是如果想取到rows里面 ...
- MyCAT实现MySQL的读写分离
在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修 ...
- Cocos2d-Lua (练手) 微信打飞机
学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西. 一.子弹效果 子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...
- PHPStorm如何配置,phpstorm的mac配置文件目录
PHPStorm的配置分为2大类:项目配置和IDE配置. 项目配置(设置),主要是配置具体项目.IDE 配置(设置),通用的设置会应用到所有的项目上. 项目配置每个项目的配置存储在项目所在目录的 .i ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- 遍历迭代map的集中方法
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- XCode日常使用备忘录
0. Introduction XCode是macOS上开发app不可缺少的开发者工具,不管是开发macOS上的应用,还是iOS上的应用,都离不开XCode环境.尽管其易用性广受诟病,但由于苹果app ...
- 3.Java网络编程之IP
前面两篇博文我们已经简单了解了IP.端口.协议以及两种参考模型,我们现在重新从程序角度来看下这个参考模型. 如果我们从事的是Web网站开发,那么我们应该知道HTML是一种超文本标记语言 (Hyper ...