- 原文博客:ReactNative相关文章
- 之前的文章只是记录了一些常用的组件, 现在记录一些偶尔会用到的一些组件
Slider
Slider 用于选择一个范围值的组件
相关属性
// 滑块的初始值。这个值应该在最小值和最大值之间,默认值是0
value={4}
// 滑块的最小值(当滑块滑到最左侧时表示的值),默认为0
minimumValue={1}
// 滑块的最大值(当滑块滑到最右端时表示的值),默认为1
maximumValue={10}
// 滑块的最小步长,这个值应该在0到(最大值-最小值)之间,默认值为0
step={2}
// 滑块左侧轨道的颜色。在iOS上默认为一个蓝色的渐变色
// ios:滑块右侧区域的颜色。android:滑块左侧区域的颜色
minimumTrackTintColor={'red'}
// ios:滑块左侧区域的颜色。android:滑块右侧区域的颜色
minimumTrackTintColor={'yellow'}
仅IOS支持:
// 给滑块设置一张图片,只支持静态图片
thumbImage={require('./image/slider.png')}
// 给轨道设置一张背景图。只支持静态图片。图片最中央的像素会被平铺直至填满轨道
trackImage={require('./image/slider1.png')}
// 指定一个滑块左侧轨道背景图,仅支持静态图片。图片最右边的像素会被平铺直至填满轨道
minimumTrackImage={require('./image/left.png')}
// 指定一个滑块右侧轨道背景图,仅支持静态图片。图片最左边的像素会被平铺直至填满轨道
maximumTrackImage={require('./image/right.png')}
仅android支持
// 滑块颜色
thumbTintColor={'orange'}
相关函数
// 用户松开滑块的时候调用此回调,无论值是否变化。回调值为当前值
onSlidingComplete={() => {}}
在用户拖动滑块的过程中不断调用此回调
onValueChange={() => {}}
StatusBar
- 控制应用状态栏的组件
- 由于StatusBar可以在任意视图中加载,且后加载的设置会覆盖先前的设置。因此在配合导航器使用时,请务必考虑清楚StatusBar的放置顺序
- 有些场景并不适合使用组件,因此StatusBar也暴露了一个静态API。然而不推荐大家同时通过静态API和组件来定义相同的属性,因为静态API定义的属性值在后续的渲染中会被组件中定义的值所覆盖
相关属性介绍
通用属性
// 指定状态栏的变化是否应以动画形式呈现。目前支持这几种样式:backgroundColor, barStyle和hidden animated bool // 是否隐藏状态栏 hidden bool
仅支持iOS
// 设置状态栏文本的颜色, 可选值: enum('default', 'light-content', 'dark-content')
barStyle={'light-content'}
// 设定网络活动指示器(就是那个菊花)是否显示在状态栏
networkActivityIndicatorVisible={true}
// 通过 hidden 属性来显示或隐藏状态栏时所使用的动画效果,有两种选择:fade(默认值)、slide
showHideTransition={'fade'}
仅支持Android
// Android 设备上状态栏的背景颜色
backgroundColor={'blue'}
translucent
true
translucent={true}
currentHeight
-
React Native在Android平台为StatusBar组件提供了一个静态常量currentHeight,我们可以通过读取这个常量来得到Android手机状态栏的高度。 - 注意:
currentHeight不是一个属性,我们直接访问StatusBar.currentHeight就可以了
Alert
- 启动一个提示对话框,包含对应的标题和信息。
- 默认情况下,对话框会仅有一个’确定’按钮
- 在 iOS 上你可以指定任意数量的按钮。每个按钮还都可以指定自己的样式,此外还可以指定提示的类别
- 在 Android 上
- 最多能指定三个按钮,这三个按钮分别具有“中间态”、“消极态”和“积极态”的概念:
- 如果你只指定一个按钮,则它具有“积极态”的属性(比如“确定”);两个按钮,则分别是“消极态”和“积极态”(比如“取消”和“确定”);三个按钮则意味着“中间态”、“消极态”和“积极态”(比如“稍候再说”,“取消”,“确定”)
- 默认情况下点击提示框的外面会自动取消提示框
{ onDismiss: () => {} } { cancelable: false }
alert()
// 显示弹窗的方法
static alert(title, message?, buttons?, options?, type?)
// 显示弹窗
_shwoAlert() {
Alert.alert(
'标题',
'弹窗提示信息',
[
{text: '稍后再说', onPress: () => console.log('稍后再说'), style: 'default'},
{text: '取消', onPress: () => console.log('取消'), style: 'cancel'},
{text: '确定', onPress: () => console.log('确定'), style: 'destructive'}
],
{ cancelable: false }
)
}
按钮样式
value |
说明 |
|---|---|
default |
默认 |
cancel |
取消样式 |
destructive |
红色确定样式 |
BackHandler
-
Android:监听后退按钮事件。如果没有添加任何监听函数,或者所有的监听函数都返回false,则会执行默认行为,退出应用 -
tvOS(即Apple TV机顶盒):监听遥控器上的后退按钮事件(阻止应用退出的功能尚未实现) -
iOS:尚无作用 - 注意: 监听函数是按倒序的顺序执行(即后添加的函数先执行)。如果某一个函数返回 true,则后续的函数都不会被调用
componentDidMount() {
// 添加监听
BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
}
componentWillUnmount() {
// 移除监听
BackHandler.removeEventListener('hardwareBackPress', this.handleBackPress);
}
handleBackPress = () => {
this.goBack();
return true;
}
// 退出当前应用
static exitApp()
Clipboard
Clipboard 组件可以在 iOS 和 Android 的剪贴板中读写内容
static getString()
// 获取剪贴板的文本内容。返回一个Promise,然后你可以用下面的方式来读取剪贴板内容。
async _getContent() {
var content = await Clipboard.getString();
}
static setString(content)
// 设置剪贴板的文本内容,然后你可以用下面的方式来设置剪贴板内容。
_setContent() {
Clipboard.setString('hello world');
}
InteractionManager
-
InteractionManager可以将一些耗时较长的工作安排到所有互动或动画完成之后再进行。这样可以保证JavaScript动画的流畅运行。比如Navigator的转场动画 - 对大多数
React Native应用来说,业务逻辑是运行在JavaScript线程上的。这是React应用所在的线程,也是发生API调用,以及处理触摸事件等操作的线程 - 如果你正在
JavaScript线程处理一个跨越多个帧的工作,你可能会注意到TouchableOpacity的响应被延迟了。这是因为JavaScript线程太忙了,不能够处理主线程发送过来的原始触摸事件
属性方法
// 静态方法,在用户交互和动画结束以后执行任务, 返回一个可取消的 promise runAfterInteractions(task) // 静态方法,创建一个句柄(处理器),通知管理器,某个动画或者交互开始了 createInteractionHandle() // 静态方法,进行清除句柄,通知管理器,某个动画或者交互结束了。 clearInteractionHandle(handler:Handle) // 设置延迟时间,该会调用setTimeout方法挂起并且阻塞所有没有完成的任务,然后在eventLoopRunningTime到设定的延迟时间后,然后执行setImmediate方法进行批量执行任务 setDeadline(deadline:number) // 事件 Events:CallExpression // 监听 addListener:CallExpression
这里最常使用的就是 runAfterInteractions 方法
InteractionManager.runAfterInteractions(() => {
navigator.push({
component: MainPager,
name: 'MainPager'
})
})
// 或者设置state
componentDidMount() {
InteractionManager.runAfterInteractions(() => {
this.setState({renderPlaceholderOnly: false});
});
}
Keyboard
Keyboard
相关方法
//用来加载一个指定事件的事件监听器 static addListener(eventName, callback) //移除某个类型事件的监听函数 static removeListener(eventName, callback) //移除某个类型事件的所有监听函数 static removeAllListeners(eventName) //把弹出的键盘收回去,同时使当前的文本框失去焦点 static dismiss()
eventName
上述函数中的 eventName 可以是如下值
-
keyboardWillShow:软键盘将要显示 -
keyboardDidShow:软键盘显示完毕 -
keyboardWillHide:软键盘将要收起 -
keyboardDidHide:软键盘收起完毕 -
keyboardWillChangeFrame:软件盘的frame将要改变 -
keyboardDidChangeFrame:软件盘的frame改变完毕
event 参数值
所有的键盘事件处理函数都能收到一个 event 参数,不过在不同平台下 event 参数可以取到的值不太一样
Android平台
event.endCoordinates.screenX event.endCoordinates.screenY event.endCoordinates.width event.endCoordinates.height
iOS平台
-
event.easing:这个值始终是keyboard -
evnet.duration:记录软键盘弹出动画的持续事件,单位是毫秒 -
event.startCoordinates.screenX -
event.startCoordinates.screenY -
event.startCoordinates.width -
event.startCoordinates.height -
event.endCoordinates.screenX -
event.endCoordinates.screenY -
event.endCoordinates.width -
event.endCoordinates.height
componentWillMount() {
// 监听键盘弹出时间
this.keyboardShow = Keyboard.addListener('keyboardWillShow', this._keyboardDidShow)
}
componentWillUnmount() {
this.keyboardShow.remove()
}
_keyboardDidShow = (event) => {
console.log(event)
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- React 组件模式-有状态组件 x 无状态组件、容器组件 x 展示组件、高阶组件 x 渲染回调(函数作为子组件)
- Serverless 组件开发尝试:全局变量组件和单独部署组件
- angular自定义组件-UI组件篇-switch组件
- React Hooks 源码解析(一):类组件、函数组件、纯组件
- Vue动态组件和异步组件
- Vue 动态组件 & 异步组件原理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript Patterns
Stoyan Stefanov / O'Reilly Media, Inc. / 2010-09-21 / USD 29.99
What's the best approach for developing an application with JavaScript? This book helps you answer that question with numerous JavaScript coding patterns and best practices. If you're an experienced d......一起来看看 《JavaScript Patterns》 这本书的介绍吧!