前言
- 对中文网的的 ReactNative 的内容进行的
提炼
- 对其中的内容进行了
简化
- 对一些我个人认为较复杂且不常用的功能或概念
采取忽略
- 对 ReactNative
不了解
的同学可能会有一点帮助 - 如笔记整理有错误还请 留言
深度阅读请访问 ReactNative中文网
ReactNative 使用
安装运行 ReactNative
react-native init
AwesomeProject- 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 字段
- 启动服务时指定端口号