ReactNative之基本组件
- 本文主要总结的是ReactNative的一些简单语法, 大部分内容总结自袁大神的文章
- 这里主要简单介绍以下几个控件:
View
和Text
Button
和Image
TextInput
View
- RN中的View组件类似于iOS中的UIView
- 一般常用于容器,往里面添加子控件,任何子组件都可以,View里面也可以在放View.
- 可设置样式: 背景颜色, 宽高等属性
- 没有点击事件,不能监听点击
- 如需要添加监听事件, 这里需要用到
TouchableOpacity
组件
TouchableOpacity
TouchableOpacity
点击控件- 如果想让一个没有点击事件的组件,能点击,就需要在外层包装一个
TouchableOpacity
,这个View,就能点击了。 - 注意:
TouchableOpacity
默认点击区域,就是所有子控件的区域,因为默认一个组件的尺寸由子控件绝对,因此TouchableOpacity
也是一样
- 如果想让一个没有点击事件的组件,能点击,就需要在外层包装一个
activeOpacity
属性
activeOpacity
: 不透明度- 一个View,被
TouchableOpacity
包装后,点击这个View
,就会有透明效果,这个效果可以通过activeOpacity
属性调整 - 取值: 0~1,1表示不透明,点击就没透明效果了。
- 一个View,被
- 使用示例:
1 | <TouchableOpacity activeOpacity={0.7}> |
disabled属性
- 如果设为true,则禁止此组件的一切交互
- 通过disabled,可以控制一个被
TouchableOpacity
包装的组件什么时候能点击。
监听的几种手势
1 | onLongPress function :长按的时候调用 |
需要注意的是:
onPress
与onPressIn
,onPressOut
,有冲突,不要同时实现
代码示例:
1 | <TouchableOpacity activeOpacity={0.7} |
Text
Text: 用于展示一段文字
属性介绍
adjustsFontSizeToFit
: 指定字体是否随着给定样式的限制而自动缩放(默认false), 为true时: 会自动改变字体大小allowFontScaling
: 控制字体是否要根据系统的“字体大小”辅助选项来进行缩放。minimumFontScale
: 当adjustsFontSizeToFit开启时,指定最小的缩放比(即不能低于这个值)。可设定的值为0.01 - 1.0numberOfLines
:最大行数,超出最大行数,就不会完全显示,超出部分显示…selectable
:决定用户是否可以长按选择文本,以便复制和粘贴,默认falsesuppressHighlighting
: 默认情况下,文本被按下时会有一个灰色的阴影,如果想取消就设置为trueonPress
: 监听文本点击的操作onLongPress
: 当文本被长按以后调用此回调函数
常用样式属性
1 | color: 'yellow' //字体颜色 |
示例使用
1 | <View style={styles.mainStyle}> |
Button
- Button:按钮,当一个文字想要点击效果,可以使用按钮
- 注意:Button没有样式,设置样式无效,最大的弊端,开发中一般不使用,一般自定义按钮,自己包装一个Text用于按钮.
- 常用属性
1 | title='Button' //按钮文字 |
代码示例
1 | <View style={styles.mainStyle}> |
TextInput
TextInput
: 文本输入框, 支持样式设置TextInput
默认没有边框,需要自己添加borderWidth
TextInput
是一个允许用户在应用中通过键盘输入文本的基本组件。本组件的属性提供了多种特性的配置,譬如自动完成、自动大小写、占位文字,以及多种不同的键盘类型(如纯数字键盘)等等。
常用属性介绍
1 | placeholder='请输入账号' //占位文字 |
autoCapitalize
: 控制TextInput是否要自动将特定字符切换为大写enum(‘none’, ‘sentences’, ‘words’, ‘characters’)
characters
: 所有的字符。words
: 每个单词的第一个字符。sentences
: 每句话的第一个字符(默认)。none
: 不自动切换任何字符为大写。
键盘类型
keyboardType
keyboardType='number-pad'
default
: 默认键盘numeric
: 带有小数点的数字键盘email-address
: 有@符的字母键盘ascii-capable
: 纯字母键盘numbers-and-punctuation
url
number-pad
phone-pad
name-phone-pad
decimal-pad
twitter
web-search
returnKeyType: 决定键盘右下角按钮显示的内容
enum('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo')
clearButtonMode: 是否要在文本框右侧显示“清除”按钮
never
: 不显示while-editing
: 编辑的时候显示always
unless-editing
常用的监听事件
1 | onBlur function |
方法
1 | isFocused(): boolean |
Image
Image
:用于加载图片- 图片可以是本地图片也可以是网络中的图片
加载图片的方式
- 首先看一下图片的三种存放方式
- 图片存放到RN项目中
- 图片存放到iOS项目中
- 图片存放到安卓项目中
- 如何加载图片
- RN中加载资源:require(文件路径),用于加载RN中的资源,不管是图片,还是json都是一样的
- uri:指定一个资源路径,就会自动加载
- uri加载注意:通过uri加载资源,必须设置图片尺寸,否则不显示
- 如果网络加载http图片,iOS默认不支持,需要在info.plist中做配置
- 各种图片加载方式
1 | <View style={styles.mainStyle}> |
相关属性介绍
source
: 设置Image图片资源source={uri: 'Benz-GLA2'}
blurRadius
: 设置图片模糊状态blurRadius={10}
- 值越大,模糊状态越明显
resizeMode
: 决定当组件尺寸和图片尺寸不成比例的时候如何调整图片的大小resizeMode='cover'
cover
: 在保持图片宽高比的前提下缩放图片,直到宽度和高度都大于等于容器视图的尺寸(如果容器有padding内衬的话,则相应减去)- 译注:这样图片完全覆盖甚至超出容器,容器中不留任何空白。
contain
: 在保持图片宽高比的前提下缩放图片,直到宽度和高度都小于等于容器视图的尺寸(如果容器有padding
内衬的话,则相应减去)- 译注:这样图片完全被包裹在容器中,容器中可能留有空白
stretch
: 拉伸图片且不维持宽高比,直到宽高都刚好填满容器。repeat
: 重复平铺图片直到填满容器。图片会维持原始尺寸。仅iOS可用。center
: 居中不拉伸
defaultSource
: 在读取图片时默认显示的加载提示图片defaultSource={uri: 'Benz-GLA2', scale: 1.0}
uri
: 是一个表示图片的资源标识的字符串,它可以是一个http地址或是一个本地文件路径(使用require
(相对路径)来引用)。width, height
: 如果你知道图片的尺寸,那么可以在这里指定。这一尺寸会被用作<Image/>
组件的默认尺寸。scale
: 图片的缩放系数。默认是1.0,意味着每一个图片像素都对应一个设备独立像素(DIP)。number
: 本地图片引用语法require('./image.jpg')
所返回的内部资源id
监听图片加载方法
1 | onLayout function |
Image类方法
1 | static getSize(uri: string, success: (width: number, height: number) => void, failure: (error: any) => void) |
- 一般在
componentDidMount
调用,先获取图片尺寸,然后在设置图片尺寸。 - 在显示图片前获取图片的宽高(以像素为单位)。如果图片地址不正确或下载失败,此方法也会失败。
- 要获取图片的尺寸,首先需要加载或下载图片(同时会被缓存起来)。
- 这意味着理论上你可以用这个方法来预加载图片,虽然此方法并没有针对这一用法进行优化,而且将来可能会换一些实现方案使得并不需要完整下载图片即可获取尺寸。
- 所以更好的预加载方案是使用下面那个专门的预加载方法。
1 | static prefetch(url: string) |
示例代码
1 | export default class App extends Component<{}> { |