前言
- 对中文网的的 ReactNative 的内容进行的
提炼 - 对其中的内容进行了
简化 - 对一些我个人认为较复杂且不常用的功能或概念
采取忽略 - 对 ReactNative
不了解的同学可能会有一点帮助 - 如笔记整理有错误还请 留言
深度阅读请访问 ReactNative中文网
ReactNative 使用
安装运行 ReactNative
react-native initAwesomeProject- cd AwesomeProject &&
react-native run-ios
提示: version参数 可用来指定版本,例如 react-native init MyApp --version 0.44.3。
Hello World
|
Props(属性)
多数组件在创建时就可使用 props参数 来定制。
Image组件使用 props
|
自定义的组件使用 props

State(状态)
- RN中可通过 props 和 state 来控制一个组件
props数据是在父组件中指定,仅生效一次state数据可根据需求进行改写
constructor可用来初始化state ,需要改写时调用setState方法
文字变换例子

Style(样式)
- 按照JS的语法要求使用了驼峰命名法
StyleSheet.create来集中定义组件的样式
|
Flexbox 布局
flexDirection 的默认值是 column 而不是row,而flex也只能指定一个数字值。
- Flexbox 主要三属性
- flexDirection
- justifyContent
- alignItems
居中排列
|
TextInput
TextInput是一个允许用户输入文本的基础组件。onChangeText属性接受一个函数,而此函数会在文本变化时被调用。onSubmitEditing属性,会在文本被提交后(用户按下软键盘上的提交键)调用。
ScrollView
- ScrollView 是一个通用的可滚动的容器,其中可放入多个组件和视图,
不区分类型,可以水平滚动 - ScrollView 适合用来显示
数量不多的滚动元素
|
ListView
- RN 中展示长列表数据的常用组件有俩个
- FlatList
- SectionList
FlatList 组件
特点
- 适用展示一组
仅数据不同的垂直滚动列表 - 适用
长列表数据且元素的个数可以增删 - FlatList
优先渲染屏幕上可见的元素
- 适用展示一组
使用
- FlatList 组件
必须的两个属性是data和renderItem。- data 是列表的
数据源 - renderItem 是从数据源中逐个
解析数据,然后返回一个设定好格式的组件来渲染。
- data 是列表的
- FlatList 组件
|
SectionList
如果想提供一组数据分成 逻辑部分 或 章节标题 ,可以使用 SectionList 。
网络请求(fetch)
发起网络请求
想从地址获取内容,只需将网址作为参数即可
|
fetch 的第二个可选参数,可用来定制HTTP请求一些参数
|
处理响应数据
- 网络请求天生就是一种异步操作
- Fetch 方法会返回一个
Promise实例,其用意是简化异步风格的代码 - 默认情况下,iOS会
阻止所有非https的请求,解决方案
|
RN 应用中使用 ES7标准中 的async/await 语法:
|
使用其他的网络库
- RN 中已经内置了
XMLHttpRequest也就是 ajax - 基于
XMLHttpRequest封装的第三方库有frisbee或是axios等 - 没有跨域限制
WebSocket
RN 支持 WebSocket,这种协议可以在单个 TCP 连接上提供 全双工 的通信信道
使用导航器跳转页面
从0.44版本开始, Navigator 被从react native的核心组件库中 抽离 到了一个名为 react-native-deprecated-custom-components 的单独模块中。
如果需要继续使用 Navigator ,则需要先 yarn add react-native-deprecated-custom-components 安装,然后从这个模块中 import,即 import { Navigator } from 'react-native-deprecated-custom-components' .
React Navigation
社区今后主推的方案是一个 单独 的导航库 react-navigation ,它的使用十分简单。
首先是在当前应用中安装此库
|
基本例子
|
图片
静态图片资源引用方式
|
注意:require中的图片名字必须是一个静态字符串, 不能使用变量 !
静态非图片资源
require 语法也可以用来静态地加载你项目中的声音、视频或者文档等文件。
注意: 视频必须指定尺寸 而不能使用flex样式.
网络图片
|
可携带参数
|
背景图片组件
开发者们常面对的一种需求就是类似web中的背景图(background-image)。要实现这一用例,只需简单使用
|
处理触摸事件
点击事件
|
- 具体使用哪种组件,取决于希望给用户什么样的视觉反馈:
TouchableHighlight:来制作按钮或者链接。用户手指按下时背景变暗TouchableNativeFeedback:用户手指按下时形成类似墨水涟漪的视觉效果(限Android)TouchableOpacity:会在用户手指按下时降低透明度TouchableWithoutFeedback:点击事件的时无效果
某些场景中你可能需要检测用户是否进行了 长按操作 。
可以在上面列出的任意组件中使用 onLongPress 属性来实现。
列表滑动
- ScrollView
- 可实现用户会在列表中或快或慢的
各种滑动 - 还可以配置
pagingEnabled属性来让用户整屏滑动 - 水平方向的滑动还可以使用Android上的
ViewPagerAndroid组件。
- 可实现用户会在列表中或快或慢的
- ListView
- 是一种特殊的ScrollView,用于显示
较长垂直列表
- 是一种特殊的ScrollView,用于显示
动画
- RN 提供了两个互补的动画系统:
- 用于
全局的布局动画LayoutAnimation - 用于创建更
精细的交互控制的动画Animated
- 用于
定时器
RN 实现了和浏览器一致的定时器 Timer 。
- 定时器
- setTimeout, clearTimeout
- setInterval, clearInterval
setImmediate, clearImmediaterequestAnimationFrame, cancelAnimationFrame
setImmediate 和 setTimeout 有略微不同.
requestAnimationFrame 和 setInterval 有略微不同.
注意: 卸载组件前务必清除定时器
直接操作
在 RN 中, setNativeProps 就是等价于直接在底层操作DOM节点的方法。
注意: 在使用 setNativeProps 之前,先尝试用 setState 或 shouldComponentUpdate 方法来解决问题
ReactNative 问题
端口占用
当运行时提示 “Packager can’t listen on port 8081” ,说明 8081 端口被占用
- 第一种
- 检查占用端口的程序并关闭
- 第二种
- 启动服务时指定端口号
react-native start --port 8083 - 手动修改项目下的
node_modules/react-native/local-cli/server/server.js中的 port 字段
- 启动服务时指定端口号