搭建第一个ReactNative
项目
环境要求
需要Node
,Python2
,Jdk
,Android Studio
,Android SDK
。
注:学会通过Chocolatey(一种流行的Windows程序包管理器)安装Node
和Python2
以及Jdk
。
配置环境变量
添加ANDROID_HOME
在Windows控制面板中的“ 系统和安全”下打开“系统”窗格,然后单击“ 更改设置…”。打开“ 高级”选项卡,然后单击“ 环境变量…”。单击New …以创建ANDROID_HOME
指向Android SDK
路径的新用户变量
将平台工具添加到Path
在Windows控制面板中的“ 系统和安全”下打开“系统”窗格,然后单击“ 更改设置…”。打开“ 高级”选项卡,然后单击“ 环境变量…”。选择Path变量,然后单击“ 编辑”。单击“ 新建”,将平台工具的路径添加到列表中。
此文件夹的默认位置是:
1 | c:\Users\YOUR_USERNAME\AppData\Local\Android\Sdk\platform-tools |
跑Demo
利用cmd
命令行界面生成一个名为AwesomeProject
的新React Native
项目
1 | react-native init AwesomeProject |
利用Android Studio
打开这个项目,并跑好虚拟机。
然后在命令行运行
1 | cd AwesomeProject |
如果设置都是正确的话,你就能得到以下界面:(这样的话第一个demo
就跑通了,要修改的话就在App.js
文件修改即可,刷新的话使用ctrl+m
或者双击RR
基础知识
简单的组件介绍
学习过Html
的话会熟悉很多,ReactNative提供很多的内置组件像<Text>
,<View>
,<Button>
这些,当然你也可以自己定义自己的组件,如下,这样的话我们就定义好了自己的组件Greeting
。
1 | class Greeting extends Component{ |
大多数组件在创建时可以使用不同的参数进行自定义。调用这些创建参数props
。
比方说利用组件Image
创建图像,可以使用命名的道具source
来控制它显示的图像。
1 | import React, {Component} from 'react'; |
这个是内置组件自带的道具,那么要是我们自己定义的组件的话想用props
也是可以的。如下
自己定义的组件,通过在下面组件的调用的时候传入参数,利用this.props来调用显示。道具的概念就是对于组件使用不同的参数进行自定义的操作。像正常组件Text调用的style,Image调用source的这些都是道具也就是props。(个人感觉把道具和props
连在一起理解会好一些)
1 | import React, {Component} from 'react'; |
对于每个组件的话是有两个控制组件的参数:props
和state
。props
由父项设置,它们在组件的整个生命周期内都是固定的。对于即将发生变化的数据,我们必须使用state
,利用setstate
来重新渲染。假设我们想要制作一直闪烁的文本的话代码如下:
1 | import React, {Component} from 'react'; |
但是在实际应用中,会调用Redux或者Mobx等状态容器来控制数据流。(还没用过,口嗨一下)
样式和组件大小
所有核心组件都接受名为的道具style
,就是当一个组件需要写的道具过多的时候,就用样式来代替它。如下:(复制下教程的代码,自己写的因为堆积内容过多)
1 | import React, { Component } from 'react'; |
组件大小的话是用width
和height
样式来控制的
1 | import React, { Component } from 'react'; |
利用Flexbox进行布局和Flex尺寸
组件可以使用Flexbox
算法指定其子项的布局,常用flexDirection
,alignItems
以及justifyContent
。不同的又有一些对应的参数值
1 | import React, {Component} from 'react'; |
我们看到第一个View有个flex的参数设置为1,它告诉组件填充所有可用空间,在具有相同父级的其他组件之间平均共享。孩子所占用的分量根据孩子的flex值进行相比分配,但是注意如果组件的父级具有大于0的维度,则组件只能展开以填充可用空间。如果父组件没有固定的width
和height
或flex
,则父组件的维度为0,flex
子组件将不可见。也就是如果父组件的flex为0了,或者只给了width或者heigth它的子组件是没办法显示的。
处理文本输入和处理接触
文本输入利用TextInput
组件,它是一个允许用户输入文本的基本组件,它有onChangeText
和onSubmitEditing
这两个props。假设用户键入时,您将其单词翻译成其他语言。在这种新语言中,每个单词用$$$
代替。(还不是很理解和这个函数的写法,后续学习补一下)
1 | import React, {Component} from 'react'; |
处理接触的话是利用Button
这个组件还有一些处理常见的手势组件(没看),简单看一下接触的处理。可触摸的组件有多种返回类型。
1 | import React, {Component} from 'react'; |
滚动条和列表视图
ScrollView
一个通用的滚动容器,可以放置多个component
或者 views
,通过参数控制是横着还是竖着。
1 | import React, {Component} from 'react'; |
React Native
提供了一套用于显示数据列表的组件:FlatList
和SectionList
。列表视图最常见的用途之一是显示从服务器获取的数据。
FlatList
组件显示一个滚动列表,它唯一呈现当前在屏幕上显示的元素,而不是一次显示所有元素。它有两个道具:data
和renderItem
。data
是列表的信息来源。renderItem
从源中获取一个项目并返回要呈现的格式化组件。
1 | import React, {Component} from 'react'; |
如果将一组数据分解为逻辑部分,可能使用部分标题,那么就使用SectionList
1 | import React, { Component } from 'react'; |