Pressable
Pressable — это обёртка для базового компонента, которая может определять различные стадии нажатия на любом из своих дочерних элементов.
<Pressable onPress={onPressFunction}>
<Text>I'm pressable!</Text>
</Pressable>
Как это работает
На элементе, обернутом в Pressable:
-
onPressInвызывается при активации нажатия. -
onPressOutвызывается при деактивации жеста нажатия.
После нажатия onPressIn произойдёт одно из двух:
- Человек уберёт палец, что вызовет
onPressOut, за которым последуетonPress. - Если человек удерживает палец дольше 500 миллисекунд перед его удалением, срабатывает
onLongPress. (onPressOutвсё равно сработает, когда он уберёт палец.)
Палец — не самый точный инструмент, и пользователи часто случайно активируют не тот элемент или пропускают область активации. Для помощи, у Pressable есть необязательная HitRect, которую вы можете использовать, чтобы определить, насколько далеко прикосновение может регистрироваться от обернутого элемента. Нажатия могут начинаться в любой точке в пределах HitRect.
PressRect позволяет нажатиям перемещаться за пределы элемента и его HitRect, сохраняя при этом активацию и подпадая под «нажатие» — представьте, как вы медленно скользите пальцем от кнопки, на которую вы нажали.
Область касания никогда не выходит за пределы области родительского элемента, а индекс Z элементов-потомков всегда имеет приоритет, если касание происходит к двум перекрывающимся элементам.
HitRect с hitSlop и установить PressRect с pressRetentionOffset.
Pressableиспользует APIPressabilityReact Native. Для получения дополнительной информации о работе механизма состояния Pressability, ознакомьтесь с реализацией Pressability.
Свойства
android_disableSound Android
Если true, то при нажатии не воспроизводится системный звук Android.
| Тип | Значение по умолчанию |
|---|---|
| boolean | false |
android_ripple Android
Включает эффект ripple Android и настраивает его свойства.
| Тип |
|---|
| RippleConfig |
children
Дочерние элементы или функция, принимающая булево значение, отражающее, нажата ли кнопка в данный момент.
| Тип |
|---|
| Узел React |
unstable_pressDelay
Время ожидания (в миллисекундах) после нажатия перед вызовом onPressIn.
| Тип |
|---|
| число |
delayLongPress
Время (в миллисекундах) от onPressIn до вызова onLongPress.
| Тип | Значение по умолчанию |
|---|---|
| число | 500 |
disabled
Отключено ли поведение нажатия.
| Тип | Значение по умолчанию |
|---|---|
| boolean | false |
hitSlop
Устанавливает дополнительное расстояние за пределами элемента, в котором можно обнаружить нажатие.
| Тип |
|---|
| Прямоугольник или число |
onLongPress
Вызывается, если время после onPressIn длится дольше 500 миллисекунд. Этот период можно настроить с помощью delayLongPress.
| Тип |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPress
Вызывается после onPressOut.
| Тип |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPressIn
Вызывается сразу при задействовании касания, до onPressOut и onPress.
| Тип |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPressOut
Вызывается при отпускании касания.
| Тип |
|---|
| ({ nativeEvent: PressEvent }) => void |
pressRetentionOffset
Дополнительное расстояние за пределами этого элемента, в котором касание считается нажатием до вызова onPressOut.
| Тип | Значение по умолчанию |
|---|---|
| Прямоугольник или число | { bottom: 30, left: 20, right: 20, top: 20 } |
style
Стили элемента или функция, принимающая булево значение, отражающее, нажата ли кнопка в данный момент, и возвращающая стили элемента.
| Тип |
|---|
| Стиль элемента |
testOnly_pressed
Используется только для документации или тестирования (например, тестирование снимков).
| Тип | Значение по умолчанию |
|---|---|
| boolean | false |
Определения типов
RippleConfig
Конфигурация эффекта ripple для свойства android_ripple.
| Тип |
|---|
| объект |
Свойства:
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
| цвет | цвет | Нет | Определяет цвет эффекта ripple. |
| borderless | boolean | Нет | Определяет, не должен ли эффект ripple включать границу. |
| радиус | число | Нет | Определяет радиус эффекта ripple. |
| foreground | boolean | Нет | Установите в true, чтобы добавить эффект ripple на передний план элемента, а не на задний. Это полезно, если у одного из дочерних элементов есть собственный фон, или вы, например, отображаете изображения, и вы не хотите, чтобы эффект ripple был закрыт ими. |
© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/pressable