Pressable is a Core Component wrapper that can detect various stages of press interactions on any of its defined children.
<Pressable onPress={onPressFunction}>
<Text>I'm pressable!</Text>
</Pressable>
On an element wrapped by Pressable:
onPressIn is called when a press is activated.onPressOut is called when the press gesture is deactivated.After pressing onPressIn, one of two things will happen:
onPressOut followed by onPress.onLongPress is triggered. (onPressOut will still fire when they remove their finger.)Fingers are not the most precise instruments, and it is common for users to accidentally activate the wrong element or miss the activation area. To help, Pressable has an optional HitRect you can use to define how far a touch can register away from the wrapped element. Presses can start anywhere within a HitRect.
PressRect allows presses to move beyond the element and its HitRect while maintaining activation and being eligible for a "press"—think of sliding your finger slowly away from a button you're pressing down on.
The touch area never extends past the parent view bounds and the Z-index of sibling views always takes precedence if a touch hits two overlapping views.
HitRect with hitSlop and set PressRect with pressRetentionOffset.
Pressableuses React Native'sPressabilityAPI. For more information around the state machine flow of Pressability and how it works, check out the implementation for Pressability.
android_disableSound If true, doesn't play Android system sound on press.
| Type | Default |
|---|---|
| boolean | false |
android_ripple Enables the Android ripple effect and configures its properties.
| Type |
|---|
| RippleConfig |
childrenEither children or a function that receives a boolean reflecting whether the component is currently pressed.
| Type |
|---|
| React Node |
unstable_pressDelayDuration (in milliseconds) to wait after press down before calling onPressIn.
| Type |
|---|
| number |
delayLongPressDuration (in milliseconds) from onPressIn before onLongPress is called.
| Type | Default |
|---|---|
| number | 500 |
disabledWhether the press behavior is disabled.
| Type | Default |
|---|---|
| boolean | false |
hitSlopSets additional distance outside of element in which a press can be detected.
| Type |
|---|
| Rect or number |
onLongPressCalled if the time after onPressIn lasts longer than 500 milliseconds. This time period can be customized with delayLongPress.
| Type |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPressCalled after onPressOut.
| Type |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPressInCalled immediately when a touch is engaged, before onPressOut and onPress.
| Type |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPressOutCalled when a touch is released.
| Type |
|---|
| ({ nativeEvent: PressEvent }) => void |
pressRetentionOffsetAdditional distance outside of this view in which a touch is considered a press before onPressOut is triggered.
| Type | Default |
|---|---|
| Rect or number | { bottom: 30, left: 20, right: 20, top: 20 } |
styleEither view styles or a function that receives a boolean reflecting whether the component is currently pressed and returns view styles.
| Type |
|---|
| View Style |
testOnly_pressedUsed only for documentation or testing (e.g. snapshot testing).
| Type | Default |
|---|---|
| boolean | false |
Ripple effect configuration for the android_ripple property.
| Type |
|---|
| object |
Properties:
| Name | Type | Required | Description |
|---|---|---|---|
| color | color | No | Defines the color of the ripple effect. |
| borderless | boolean | No | Defines if ripple effect should not include border. |
| radius | number | No | Defines the radius of the ripple effect. |
| foreground | boolean | No | Set to true to add the ripple effect to the foreground of the view, instead of the background. This is useful if one of your child views has a background of its own, or you're e.g. displaying images, and you don't want the ripple to be covered by them. |
© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/pressable