React Native Drawer Layout¶
Кроссплатформенный компонент Drawer
для React Native, реализованный с использованием react-native-gesture-handler
и react-native-reanimated
.
Этот пакет не интегрируется с React Navigation. Если вы хотите интегрировать компоновку drawer с навигационной системой React Navigation, например, отображать экраны в drawer и иметь возможность переходить между ними с помощью navigation.navigate
и т.д., используйте вместо этого Drawer Navigator.
Установка¶
Чтобы использовать этот пакет, откройте Терминал в корне проекта и выполните команду:
1 |
|
Затем необходимо установить и настроить библиотеки, которые требуются drawer:
-
Сначала установите
react-native-gesture-handler
иreact-native-reanimated
.Если у вас Expo-управляемый проект, то в каталоге проекта выполните команду:
1
npx expo install react-native-gesture-handler react-native-reanimated
Если у вас есть "голый" проект React Native, в каталоге проекта выполните команду:
1
npm install react-native-gesture-handler react-native-reanimated
Drawer поддерживает как Reanimated 1, так и Reanimated 2. Если вы хотите использовать Reanimated 2, обязательно настройте его, следуя руководству по установке.
-
Чтобы завершить установку
react-native-gesture-handler
, добавьте следующее в top (убедитесь, что он находится в самом верху и перед ним нет ничего другого) вашего входного файла, напримерindex.js
илиApp.js
:1
import 'react-native-gesture-handler';
Если вы создаете приложение для Android или iOS, не пропускайте этот шаг, иначе оно может упасть в производстве, даже если в разработке оно работает нормально. Это не относится к другим платформам.
-
Если вы работаете на Mac и разрабатываете под iOS, то для завершения связывания необходимо также установить капсулы (через Cocoapods).
1
npx pod-install ios
Готово! Теперь вы можете собрать и запустить приложение на своем устройстве/симуляторе.
Быстрый старт¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Справочник по API¶
Пакет экспортирует компонент Drawer
, который используется для визуализации ящика.
Drawer
¶
Компонент, отвечающий за отрисовку ящика с анимацией и жестами.
Параметры Drawer
open
Открыт ли ящик или нет.
onOpen
Обратный вызов, который вызывается при открытии ящика.
onClose
Обратный вызов, который вызывается при закрытии ящика.
renderDrawerContent
Обратный вызов, который возвращает элемент react для отображения в качестве содержимого ящика.
layout
Объект, содержащий макет контейнера. По умолчанию соответствует размерам окна приложения.
drawerPosition
Положение ящика на экране. По умолчанию в режиме RTL - правая
, в остальных случаях - левая
.
drawerType
Тип ящика. Он определяет внешний вид и анимацию ящика.
front
: Традиционный ящик, закрывающий экран с накладкой за ним.back
: Ящик открывается за экраном при пролистывании.slide
: Экран и ящик сдвигаются при пролистывании, открывая ящик.permanent
: Постоянный ящик отображается в виде боковой панели.
По умолчанию slide
на iOS и front
на других платформах.
drawerStyle
Объект стиля для ящика. Вы можете передать пользовательский цвет фона для ящика или его ширину.
overlayStyle
Объект стиля для оверлея.
hideStatusBarOnOpen
Скрывать ли строку состояния при открытии ящика. По умолчанию имеет значение false
.
keyboardDismissMode
Должна ли клавиатура отключаться при открытии ящика. Поддерживаются следующие значения:
none
: Клавиатура не будет отключаться при открытии ящика.on-drag
: Клавиатура будет отключаться при открытии ящика жестом пролистывания.
По умолчанию установлено значение on-drag
.
statusBarAnimation
Анимация, используемая при скрытии строки состояния. Поддерживаются следующие значения:
slide
: Строка состояния будет скрыта из виду.fade
: Строка состояния будет исчезать из поля зрения.none
: Строка состояния не будет анимироваться.
Используется в сочетании с hideStatusBarOnOpen
.
swipeEnabled
Включать ли жесты пролистывания для открытия ящика. По умолчанию имеет значение true
.
Жесты пролистывания поддерживаются только на iOS и Android.
swipeEdgeWidth
На каком расстоянии от края экрана должен активироваться жест пролистывания. По умолчанию 32
.
Поддерживается только на iOS и Android.
swipeMinDistance
Минимальное расстояние пролистывания, при котором должно активироваться открытие ящика. По умолчанию 60
.
Поддерживается только на iOS и Android.
swipeMinVelocity
Минимальная скорость движения, при которой должно активироваться открытие ящика. По умолчанию 500
.
Поддерживается только на iOS и Android.
gestureHandlerProps
Реквизиты для передачи базовому обработчику жестов панорамирования.
Поддерживается только на iOS и Android.
children
Содержимое, в которое должен быть обернут ящик.
useDrawerProgress
¶
Хук useDrawerProgress
возвращает Reanimated SharedValue (при современной реализации) или Reanimated Node (при устаревшей реализации), которые представляют прогресс работы ящика. Его можно использовать для анимирования содержимого экрана.
Пример с современной реализацией:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Пример с унаследованной реализацией:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Если вы используете компоненты класса, то для получения значения прогресса можно использовать DrawerProgressContext
.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|