在学习了React-Native的搭建以后,然后就在网上找了一些Demo来学习,并且开始练习。
官网:https://reactnative.cn/docs/0.46/getting-started.html
几个Demo链接:
GankIO
运行的步骤:
- git clone https://github.com/wangdicoder/react-native-Gank
- cd react-native-Gank
- npm install
- react-native link (this step is for add the icon component)
- react-native run-android / run-ios
常用组件
View组件
类似于div的组件就是View容器组件,视图布局都是用它,支持flexbox的布局。
Text组件
一个用于显示文本的React组件,并且它也支持嵌套、样式,以及触摸处理。有onPress事件,可以给text组件绑定触摸点击事件。
TextInput组件
TextInput是一个允许用户在应用中通过键盘输入文本的基本组件。本组件的属性提供了多种特性的配置,譬如自动完成、自动大小写、占位文字,以及多种不同的键盘类型(如纯数字键盘)等等。
Touchable组件
TouchableHighlight
高亮触摸,用户点击的时候会产生高亮的效果。
TouchableOpacity
透明触摸,用户点击时,点击的组件会出现透明过度的效果。
activeOpacity number
指定封装的视图在被触摸操作激活时以多少不透明度显示(通常在0到1之间)。
TouchableWithoutFeedback
一般不要使用。
NavigatorIOS组件
对UIKit Navigation的封装,实质就是调用了这个。属性:
- barTintColor:导航条的背景颜色
- initialRoute:初始化路由
- itemWrapperStyle:设置每个页面的背景颜色
- navigationHidden:是否隐藏阴影
- tintColor:导航条上的按钮的颜色的设置
- titleTextColor:导航栏上字体的颜色
- translucent:导航条是否是半透明的
- push到新的页面
- pop返回
- replace替换当前路由
- replacePrevious(route)替换前一个页面的视图并且回退过去
- resetTo(reset)取代最顶层的路由并且回退过去
- popToTop:回到最上层的视图
例子:
1 | export default class App extends React.Component{ |
TabBarIOS组件
有TabBarIOS和TabBarIOS.item两种,后者是前者的附属组件。
TabBarIOS属性:
- barTintColor:标签栏的背景颜色。
- tintColor:当前被选中的标签图标的颜色。
- unselectedItemTintColor string
当前没有被选中的标签图标的颜色。仅在iOS 10及以上版本有效. - translucent bool 一个布尔值,决定标签栏是否需要半透明化。
TabBarIOS.Item属性:
- badge:在图标右上角显示一个红色的气泡。
- icon 给当前标签指定一个自定义的图标。如果定义了systemIcon属性, 这个属性会被忽略。
- onPress 当此标签被选中时调用。你应该修改组件的状态来使得selected={true}。
- selected 这个属性决定了子视图是否可见。
- selectedIcon 当标签被选中的时候显示的自定义图标。如果定义了systemIcon属性,这个属性会被忽略。如果定义了icon而没定义这个属性,在选中的时候图标会染上蓝色。
- systemIcon enum(‘bookmarks’, ‘contacts’, ‘downloads’, ‘favorites’, ‘featured’, ‘history’, ‘more’, ‘most-recent’, ‘most-viewed’, ‘recents’, ‘search’, ‘top-rated’) 一些预定义的系统图标。注意如果你使用了此属性,标题和自定义图标都会被覆盖为系统定义的值。
- title在图标下面显示的标题文字。如果定义了systemIcon属性,这个属性会被忽略。
Image
一个用于显示多种不同类型图片的React组件,包括网络图片、静态资源、临时的本地图片、以及本地磁盘上的图片(如相册)等。详细用法参阅图片文档。
resizeMode enum(‘cover’, ‘contain’, ‘stretch’, ‘repeat’, ‘center’)
决定当组件尺寸和图片尺寸不成比例的时候如何调整图片的大小。
FlatList
高性能的简单列表组件,支持下面这些常用的功能:
- 完全跨平台。
- 支持水平布局模式。
- 行组件显示或隐藏时可配置回调事件。
- 支持单独的头部组件。
- 支持单独的尾部组件。
- 支持自定义行间分隔线。
- 支持下拉刷新。
- 支持上拉加载。
- 支持跳转到指定行(ScrollToIndex)。
如果需要分组/类/区(section),请使用。 WebView
创建一个原生的WebView,可以用于访问一个网页。
属性:
- onError 加载失败时调用。
- onLoad 加载成功时调用。
- onLoadEnd 加载结束时(无论成功或失败)调用。
- onLoadStart 加载开始时调用。
- onMessage 在webview内部的网页中调用window.postMessage方法时可以触发此属性对应的函数,从而实现网页和RN之间的数据交换。 设置此属性的同时会在webview中注入一个postMessage的全局函数并覆盖可能已经存在的同名实现。
网页端的window.postMessage只发送一个参数data,此参数封装在RN端的event对象中,即event.nativeEvent.data。data 只能是一个字符串。 - injectedJavaScript 设置在网页加载之前注入的一段JS代码。
API
AppRegistry
其中iOS代码的入口在index.ios.js中,
在index.ios.js中注册入口:
AppRegistry.registerComponent('GankIO', () => App);
当注册完应用程序组件后,Native的系统就会加载jsbundle文件并且触发AppRegistry.runApplication运行程序。AppRegistry有以下的方法:
- registerConfig:静态方法,注册配置
- registerComponent注册入口组件
- registerRunnable:注册函数监听
- getAppKey:获取registerRunnable注册的监听键
- runApplication运行程序
AlertIOS
启动一个提示对话框,包含对应的标题和信息。
你还可以指定一系列的按钮,点击对应的按钮会调用对应的onPress回调并且关闭提示框。默认情况下,对话框会仅有一个’确定’按钮。
PixelRatio
告知开发者像素的密度。
根据像素密度获取指定大小的图片。
像素网格对齐。
AppState
AppState能告诉你应用当前是在前台还是在后台,并且能在状态变化的时候通知你。
AppState通常在处理推送通知的时候用来决定内容和对应的行为。
active - 应用正在前台运行
background - 应用正在后台运行。用户既可能在别的应用中,也可能在桌面。
inactive - 此状态表示应用正在前后台的切换过程中,或是处在系统的多任务视图,又或是处在来电状态中。
CameraRoll
CameraRoll模块提供了访问本地相册的功能。在iOS上使用这个模块之前,你需要先链接RCTCameraRoll库。
从iOS10开始,访问相册需要用户授权。你需要在Info.plist中添加一条名为NSCameraUsageDescription的键,然后在其值中填写向用户请求权限的具体描述。编辑完成后这个键在Xcode中实际会显示为Privacy - Camera Usage Description。
- static saveImageWithTag(tag)
保存一个图片到相册。 - static saveToCameraRoll
- getPhotos(params: object)
返回一个带有图片标识符对象的Promise。
Geolocation
你需要在Info.plist中增加NSLocationWhenInUseUsageDescription字段来启用定位功能。如果你使用react-native init创建项目,定位会被默认启用。
属性:
- getCurrentPosition(geo_success: Function, geo_error?: Function, geo_options?: GeoOptions) 获取当前位置,
成功时会调用geo_success回调,参数中包含最新的位置信息。 watchPosition(success: Function, error?: Function, options?: GeoOptions) 持续监听位置,每当位置变化之后都调用success回调。支持的选项:timeout (ms), maximumAge (ms), enableHighAccuracy (bool)
static clearWatch(watchID: number) 依据ID清除检测
- stopObserving()停止检测
AsyncStorage
AsyncStorage是一个简单的、异步的、持久化的Key-Value存储系统,它对于App来说是全局性的。它用来代替LocalStorage。
每个方法都有一个回调函数,回调函数的第一个参数都是错误对象,如果发生错误就会展示错误对象,否则为null。所有方法执行后,都会返回一个Promise对象。
方法:
static getItem(key: string, callback?: ?(error: ?Error, result: ?string) => void)
根据键来获取值,获取的结果会在回调函数,第一个static setItem(key: string, value: string, callback?: ?(error: ?Error) => void) 设置键值对
- static removeItem(key: string, callback?: ?(error: ?Error) => void)
根据键值移除对象 - static mergeItem(key: string, value: string, callback?: ?(error: ?Error) => void) 合并现有值和输入值。
- static clear(callback?: ?(error: ?Error) => void) qing
- static getAllKeys(callback?: ?(error: ?Error, keys: ?Array
) => void)
获取所有的键。 - static flushGetRequests() 清除所有进行中的查询操作。
static multiGet(keys: Array
, callback?: ?(errors: ?Array , result: ?Array<Array >) => void)
获取多项
multiGet([‘k1’, ‘k2’], cb) -> cb([[‘k1’, ‘val1’], [‘k2’, ‘val2’]])static multiSet(keyValuePairs: Array<Array
>, callback?: ?(errors: ?Array ) => void)
设置多项。multiSet和multiMerge都接受一个与multiGet输出值一致的key-value数组的数组。返回一个Promise对象。
multiSet([[‘k1’, ‘val1’], [‘k2’, ‘val2’]], cb);
- static multiRemove(keys: Array
, callback?: ?(errors: ?Array ) => void)
删除所有键在keys数组中的数据。返回一个Promise对象。
- static multiMerge(keyValuePairs: Array<Array
>, callback?: ?(errors: ?Array ) => void) 多个键值对合并。
还没有被所有原生实现都支持。
定时器
setTimeout
用于设定一个定时任务
setInterval
主要用于设定循环
setImmediate
用于设置立即执行的任务
网络数据请求
XMLHttpRequest(即俗称的ajax)
与web的一样,
Fetch
fetch('https://mywebsite.com/endpoint/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
firstParam: 'yourValue',
secondParam: 'yourOtherValue',
})
})