Довідник API для React

Повний довідник @reelkit/react : компоненти, пропси та методи.

Пропси Reel

ReelProps

PropТипТипове значенняОпис
countnumberrequiredЗагальна кількість елементів
size[number, number]-Ширина й висота у вигляді [width, height]. Якщо не задано, вимірюється автоматично через ResizeObserver
itemBuilder(index, indexInRange, size) => ReactElementrequiredФункція, що рендерить кожен слайд
direction'vertical' | 'horizontal''vertical'Напрямок прокручування
initialIndexnumber0Початковий індекс
loopbooleanfalseВмикає нескінченний цикл
enableWheelbooleanfalseВмикає навігацію колесом миші
wheelDebounceMsnumber200Дебаунс події колеса в мілісекундах
enableNavKeysbooleantrueВмикає навігацію з клавіатури
onNavKeyPress(increment: -1 | 1) => void-Власний обробник навігації стрілками. Замінює стандартну поведінку prev/next.
transitionTransitionTransformFnslideTransitionФункція ефекту переходу. Вбудовані: slideTransition, fadeTransition, flipTransition, cubeTransition, zoomTransition
transitionDurationnumber300Тривалість анімації в мілісекундах
enableGesturesbooleantrueВмикає навігацію перетягуванням дотиком або мишею
swipeDistanceFactornumber0.12Поріг свайпу (0–1)
rangeExtractor(index: number, count: number) => number[]defaultRangeExtractorВласна функція, що визначає, які індекси рендеряться
keyExtractor(index: number) => string-Власна функція ключів для звіряння в React (корисно з циклом)
apiRefRefObject<ReelApi>-Ref для доступу до методів API
classNamestring-Клас CSS для елемента-контейнера
styleCSSProperties-Вбудовані стилі для елемента-контейнера
ariaLabelstring-Доступна назва області каруселі, яку читають екранні читачі

Колбеки

PropТипОпис
afterChange(index, indexInRange) => voidВикликається після завершення зміни слайда
beforeChange(index, nextIndex, indexInRange) => voidВикликається перед початком зміни слайда
onSlideDragStart(index) => voidВикликається на початку перетягування
onSlideDragEnd(index) => voidВикликається після завершення перетягування
onSlideDragCanceled(index) => voidВикликається, коли перетягування скасовано

Методи ReelApi

Доступ до методів слайдера через apiRef:

typescript
const apiRef = useRef<ReelApi>(null);

// Navigation
apiRef.current?.next();
apiRef.current?.prev();
apiRef.current?.goTo(5);           // instant
apiRef.current?.goTo(5, true);     // animated

// Lifecycle
apiRef.current?.adjust();          // recalculate positions
apiRef.current?.observe();         // start observing keyboard
apiRef.current?.unobserve();       // stop observing keyboard
МетодТипОпис
next()() => voidПерейти до наступного слайда
prev()() => voidПерейти до попереднього слайда
goTo(index, animate?)(number, boolean?) => PromiseПерейти до конкретного слайда
adjust()() => voidПерерахувати позиції слайдів
observe()() => voidПочинає стежити за клавіатурою
unobserve()() => voidПрипиняє стежити за клавіатурою

Пропси ReelIndicator

ReelIndicatorProps

PropТипТипове значенняОпис
countnumberautoЗагальна кількість елементів. Береться від батьківського Reel, якщо компонент вкладений у нього; передавайте явно за окремого використання
activenumberautoПоточний активний індекс. Береться від батьківського Reel, якщо компонент вкладений у нього; передавайте явно за окремого використання
direction'vertical' | 'horizontal''vertical'Орієнтація індикатора
radiusnumber3Розмір точки в пікселях
visiblenumber5Максимум видимих точок звичайного розміру
gapnumber4Відстань між точками в пікселях
activeColorstring'#fff'Колір активної точки
inactiveColorstring'rgba(255,255,255,0.5)'Колір неактивної точки
edgeScalenumber0.5Масштаб крайніх точок за межами видимого
onDotClick(index: number) => void-Колбек на клік по точці
classNamestring-Власний клас CSS
styleCSSProperties-Власні вбудовані стилі

Компоненти-спостерігачі

Observe

Містить між сигналами ядра й рендерингом React без зайвих рендерів батька. Коли підписані сигнали змінюються, виконується заново лише функція children.

tsx
import { Observe } from '@reelkit/react';

<Observe signals={[controller.state.index]}>
  {() => <span>Current: {controller.state.index.value}</span>}
</Observe>
PropТипТипове значенняОпис
signalsSubscribable[]requiredСигнали для підписки. Сповіщення від будь-якого з них перезапускає функцію children — і лише її, ніколи батьківський компонент. Інший сигнал, переданий у пізнішому рендері, відстежується замість того, який він замінив.
children() => ReactElement | nullrequiredФункція рендерингу, що виконується заново на кожну зміну. Читайте значення сигналів усередині неї; прочитане ззовні захоплюється один раз і застаріває.

AnimatedObserve

Підписується на сигнали анімованих значень і плавно інтерполює через requestAnimationFrame.

tsx
import { AnimatedObserve } from '@reelkit/react';

<AnimatedObserve signal={controller.state.axisValue}>
  {(value) => (
    <div style={{ transform: `translateY(${value}px)` }} />
  )}
</AnimatedObserve>
PropТипТипове значенняОпис
signalSignal<AnimatedValue>requiredСигнал, що видає { value, duration, done? }. Тривалість більша за 0 інтерполює від поточного значення до нового; 0 переходить одразу.
children(value: number) => ReactElementrequiredФункція рендерингу отримує інтерпольоване значення для поточного кадру, застосоване синхронно, щоб DOM встигав за анімацією.

SwipeToClose

<SwipeToClose> обгортає дітей у контейнер, що йде за вертикальним свайпом і викликає onClose, щойно свайп перейде поріг, — жест закриття Lightbox і Stories Player для вашого власного оверлея. SwipeToCloseProps типізує його пропси; SwipeToCloseDirection — це 'up' | 'down'.

PropТипТипове значенняОпис
directionSwipeToCloseDirectionrequired'up' закриває, як Lightbox, 'down' — як Stories Player
onClose() => voidrequiredВикликається, коли свайп перейшов поріг і анімація виходу завершилася
enabledbooleantrueВимикає жест без демонтування
thresholdnumber0.2Частка висоти вікна, яку має подолати свайп
classNamestring—Клас на зовнішньому <div>
childrenReactNoderequiredВміст, що рухається разом зі свайпом

SoundProvider

<SoundProvider> створює один SoundController, спершу без звуку, і передає його дітям через useSoundState. Оверлеї рендерять його самі; додавайте власний лише навколо власного плеєра, елементи керування якого ділять один стан звуку.

Hooks

useBodyLock

Блокує прокручування body й компенсує зсув на ширину смуги прокручування.

typescript
import { useBodyLock } from '@reelkit/react';

// Lock body scroll when overlay is open
useBodyLock(isOpen);

useOverlayUrlState

OverlayUrlStateOptions

Будує контролер стану в URL для оверлея, який ви передаєте в *UrlOverlay як його controller prop.

See Стан в URL у посібнику для React — там покроковий розбір і приклади.

OptionТипТипове значенняОпис
paramstringrequiredПараметр запиту, що несе активний слайд, наприклад "photo". Читається під час першого рендеру й не змінюється весь час життя компонента — щоб змінити, перемонтуйте його (задайте key).
adapterUrlAdapterHistory APIСистема навігації, через яку читати й писати. У застосунку з роутером передайте адаптер на його базі, щоб власне місцеположення роутера не застаріло. Читається під час першого рендеру й не змінюється весь час життя компонента — щоб змінити, перемонтуйте його.
codec{ decode(raw) => Id | null; encode(id) => string }requiredФормат передавання: текст параметра ↔ стабільна ідентичність, незалежно від колекції. Іде разом із локатором як узгоджена пара з однаковим Id — розгорніть ...urlIndexKey(() => images.length) для типової галереї з ?photo=3 або передайте власний (base64, slug), щоб закладка пережила зміну порядку галереї. Читається наживо: наступне декодування чи кодування виконує кодек з останнього рендеру.
locator{ locate(id) => number | null; locateAsync?(id) => Promise<number | null>; identify(index) => id }requiredЗіставляє ідентичність із позицією і сам відповідає за свою чинність: locate (синхронно), locateAsync (запасний варіант для посторінкової галереї), identify (для запису). Для звичайної галереї за індексом розгорніть ...urlIndexKey(() => images.length) — він дає цей локатор разом із відповідним кодеком і обмежує ?photo=3 живою кількістю, тож застарілий ?photo=99 сам зникає з URL замість того, щоб відкрити слайд, якого ніхто не називав. Посторінкова стрічка або галерея з адресацією за ідентичністю передає власну узгоджену пару кодек + локатор. Читається наживо: на наступний пошук відповідає локатор з останнього рендеру, а додавання чи прибирання locateAsync між рендерами діє з наступного промаху.

useReactRouterUrlAdapter

A UrlAdapter на базі React Router. Передайте його як опцію adapter у useOverlayUrlState у застосунку з роутером, щоб роутер лишався єдиним джерелом правди про навігацію: запис history.pushState повз роутер лишає його місцеположення застарілим, і наступна навігація втрачає параметр. Запис торкається лише запиту, тож шлях і хеш лишаються недоторканими. Кожна зміна повідомляє, чи роутер додав запис на тій самій сторінці, замінив його чи пройшов історією, тож галерея, відкрита з <Link>, закривається одним кроком назад.

Постачається з окремого підшляху, тож застосунок без роутера ніколи не тягне react-router-dom у свій бандл. react-router-dom — необов’язкова peer-залежність.

tsx
import { useReactRouterUrlAdapter } from '@reelkit/react/react-router-url-adapter';

const adapter = useReactRouterUrlAdapter();
const photo = useOverlayUrlState({
  param: 'photo',
  adapter,
  ...urlIndexKey(() => images.length),
});

useReelContext

useReelContext() читає ReelContextValue найближчого батьківського <Reel> або повертає null поза ним. <ReelIndicator> підключається через нього; використовуйте його у власних елементах керування, які рендеряться як діти <Reel>, щоб вони йшли за слайдером без пропсів. ReelContext — об’єкт контексту за ним; задавайте власне значення лише в тесті чи власній обгортці.

ВластивістьТипОпис
indexSignal<number>Індекс активного слайда; читайте .value всередині Observe
countSignal<number>Загальна кількість слайдів
goTo(index: number, animate?: boolean) => Promise<void>Перейти до слайда з анімацією чи без

useSoundState

useSoundState() читає SoundController з найближчого <SoundProvider> і кидає помилку поза ним. Reel Player, Lightbox і Stories Player обгортають свій вміст у провайдер, тож власні елементи керування, які ви передаєте через їхні render-пропси, можуть викликати його, щоб прочитати або перемкнути звук.

useFullscreen

useFullscreen({ ref }) керує Fullscreen API для елемента в ref і виходить із повного екрана, коли компонент демонтується. UseFullscreenProps — його аргумент; UseFullscreenResult — кортеж, який він повертає.

ІндексТипОпис
[0]Signal<boolean>Чи сторінка в повноекранному режимі; читайте .value всередині Observe
[1]() => Promise<void>Запитати повний екран для елемента, спершу вийшовши з повного екрана іншого елемента
[2]() => Promise<void>Вийти з повного екрана
[3]() => Promise<void>Перемкнути між цими двома станами

Accessibility

<Reel> рендериться як role="region" з aria-roledescription="carousel". Задайте пропс ariaLabel , щоб дати області назву для екранного читача. Ввічлива жива область оголошує «Слайд N з M» на кожну зміну слайда, не перерендерюючи карусель. Неактивні слайди отримують атрибут inert , тож фокус і навігація допоміжних технологій їх пропускають.

<ReelIndicator> рендериться як role="tablist" з рухомим tabindex на точках; стрілки переміщують фокус, а Enter або Space активує слайд.

Будуєте власне модальне вікно навколо <Reel>? captureFocusForReturn, createFocusTrap, та getFocusableElements — вони реекспортовані з @reelkit/react для повернення й утримання фокуса.

Utilities

createDefaultKeyExtractorForLoop

Створює екстрактор ключів, який дає раду однаковим індексам, коли loop увімкнено.

tsx
import { createDefaultKeyExtractorForLoop } from '@reelkit/react';

<Reel
  count={items.length}
  size={size}
  loop
  keyExtractor={createDefaultKeyExtractorForLoop(items.length)}
  itemBuilder={...}
/>

Визначення розміру

observeElementSize, getViewportSize, observeViewportSize, isMobileWidth, fitAspectRatio і isTouchDevice реекспортуються з @reelkit/react — для власного оверлея, який визначає свій розмір так само, як оверлеї reelkit. Див. Визначення розміру в API ядра.

Автовідтворення та завантаження

createTimerController, createSlideshowController і downloadFile також реекспортуються з @reelkit/react: таймер, на якому працюють плеєри історій, слайдшоу, що стоїть за autoAdvance у Lightbox, і помічник, що стоїть за його кнопкою завантаження. Див. Автовідтворення і Завантаження файлів в API ядра.