React Native Hooks
提供一些基础的 Hook,以及 React Native 独有的 Hook。
Note: React Native >= 0.59.0
Installation
yarn add rn-hooks
API
React
- useUpdateEffect
- useEffectOnce
- useMount
- useUnMount
- useForceUpdate
- useBoolean
- useAsync
- useEventListener
- useCurrentValue
- useTimeout
- useInterval
React Native
- useNativeEventListener
- useAnimation
- useNavigationFocus
- useNavigationFocusEffect
- useAsyncStorageState
- useDimensions
- useAppState
- useInteractionState
- useKeyboard
- useOrientation
React
useUpdateEffect
与 useEffect
类似,唯一区别是 useUpdateEffect
在 mount
阶段不会执行。
; ;
useEffectOnce
只会执行一次useEffect
; //exec once;
useMount
模拟class组件
的componentDidMount
事件。
; ;
useUnMount
模拟class组件
的componentWillUnMount
事件。
; ;
useForceUpdate
模拟class组件
的forceUpdate
api。
;const update = ;// update()
useBoolean
; const state setTrue setFalse toggle = ;
返回值
参数名 | 类型 | 描述 |
---|---|---|
state | boolean |
- |
setTrue | Function |
- |
setFalse | Function |
- |
toggle | Function |
切换布尔值 |
useAsync
简化异步操作,包含 loading
处理、取消等。
useAsync<T>( fn: (...args: any[]) => Promise<T>, deps: DependencyList, options?: Options<T>): ReturnValue<T>
const loading data: votes = setData: setVotes run } = useAsync<VoteInfo>getVotes schoolUid classUid updateTag;
参数
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
fn | (...args: any[]) => Promise<T> |
异步函数 | |
deps | React.DependencyList |
依赖 | |
options | Options<T> |
配置项 | |
options.manual | boolean |
手动触发 | false |
options.onSuccess | (data: T) => void |
成功时回调 | |
options.onError | (e: Error or string) => void |
失败时回调 | |
options.autoCancel | boolean |
自动取消 | true |
返回值
参数名 | 类型 | 描述 |
---|---|---|
loading | boolean |
- |
run | (showLoading?: boolean) => Promise<T> |
手动执行函数 |
error | Error or string |
错误信息 |
setData | React.Dispatch<T> |
手动设置数据 |
useEventListener
简化事件监听与销毁。
useEventListener<T extends Emitter>( emitter: T, eventName: string, handler: Function ): void
参数
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
emitter | Emitter |
包含下列监听和销毁方法的都可以[addListener, removeListener] ,[addEventListener, removeEventListener] ,[addListener, remove] ,[subscribe, unsubscribe] |
|
eventName | string |
事件名 | |
handler | Function |
事件回调 |
useCurrentValue
始终使用最新的值。
useCurrentValue<Text>(initialValue: T): MutableRefObject<Text>
; { const ref = ; // ref.current === data};
useTimeout
简化setTimeout
操作,组件卸载后会及时清理掉未执行的定时器。
useTimeout(handler: Function, timeout: number, manual?: boolean): ReturnValue
;;
参数
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
handler | Function |
执行回调 | |
timeout | number |
时间 | |
manual | boolean |
是否手动执行,true 需要手动调用start 执行 |
false |
返回值
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
complete | boolean or undefined |
完成标示, undefined 表示还未执行 |
false |
start | Function |
手动执行函数,可重复执行 | - |
clear | Function |
手动清除 | - |
useInterval
简化setInterval
操作,组件卸载后会及时清理掉定时器。
useInterval(handler: Function, timeout: number, manual?: boolean): ReturnValue
;;
参数
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
handler | Function |
执行回调 | |
timeout | number |
时间 | |
manual | boolean |
是否手动执行,true 需要手动调用start 执行 |
false |
返回值
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
start | Function |
手动执行函数,可重复执行 | - |
clear | Function |
手动清除 | - |
React Native
useNativeEventListener
React Native DeviceEventEmitter
事件监听。
;;
useAsyncStorageState
增强useState
,提供异步缓存。
useAsyncStorageState<T extends AsyncStorageStatic, S>( storage: T, key: string, initialState?: State<S> ): [S | undefined, (state: State<S> | undefined, immediate?: boolean) => void]
;;;
返回值
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
state | - | 同setState |
false |
clear | (state: State<S>, immediate?: boolean) => void |
true 会立即设置 state,不会等待缓存设置成功。false 会等待缓存设置成功后才设置 state |
- |
useAnimation
简化动画,支持timing
、spring
、decay
动画。支持二维动画。
useAnimation(config: AnimationConfig): ReturnValue
参数
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
initialValue | number or {x:number, y:number} |
||
type | timing、spring、decay |
动画类型 | |
onEnd | Animated.EndCallback |
结束回调 | - |
manual | boolean |
是否手动执行,true 需要手动调用restart 执行 |
false |
返回值
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
value | Animated.Value or Animated.ValueXY |
同Animated |
|
restart | Function |
重新执行 | |
restore | Function |
回到初始状态 | - |
useNavigationFocus
导航失焦获焦点状态。
Note: React-Navigation < 5
useNavigationFocus(navigation: NavigationScreenProp<NavigationState>): boolean
;;
useNavigationFocusEffect
与 useEffect
类似,监听导航 didFocus
,didBlur
事件。
Note: React-Navigation < 5
useNavigationFocusEffect(navigation: NavigationScreenProp<NavigationState>, effect: EffectCallback)
;;
useDimensions
设备尺寸信息
useDimensions():{window: ScaledSize;screen: ScaledSize;}
;;
useOrientation
横竖屏判断
useOrientation(): {isPortrait: boolean; isLandscape: boolean;}
;;
useAppState
App 当前状态
useAppState(): AppStateStatus
;;
useInteractionState
是否可交互状态
useInteractionState(): boolean
;;
useKeyboard
获取键盘一些信息
useKeyboard():ReturnValue
;;
返回值
参数名 | 类型 | 描述 | 默认值 |
---|---|---|---|
shown | boolean |
键盘是否打开 | |
height | number |
键盘高度 | |
coordinates | Coordinates |
键盘位置 | - |
coordinates.start | ScreenReact |
键盘起点 | - |
coordinates.end | ScreenReact |
键盘终点 | - |
useOrientation
设备横竖屏信息
useOrientation(): {isPortrait: boolean;isLandscape: boolean;}
;;