React-API-Referenz

Vollständige Referenz für die Komponenten, Props und Methoden von @reelkit/react.

Props von Reel

ReelProps

PropTypStandardBeschreibung
countnumberPflichtGesamtzahl der Einträge
size[number, number]-Breite und Höhe als [width, height]. Fehlt es, wird die Größe per ResizeObserver gemessen
itemBuilder(index, indexInRange, size) => ReactElementPflichtFunktion, die jeden Slide rendert
direction'vertical' | 'horizontal''vertical'Richtung des Scrollens
initialIndexnumber0Index zum Start
loopbooleanfalseSchaltet die Endlosschleife ein
enableWheelbooleanfalseSchaltet die Navigation mit dem Mausrad ein
wheelDebounceMsnumber200Debounce für Mausrad-Events in ms
enableNavKeysbooleantrueSchaltet die Tastaturnavigation ein
onNavKeyPress(increment: -1 | 1) => void-Eigener Handler für die Navigation mit den Pfeiltasten. Ersetzt das Standardverhalten von prev/next.
transitionTransitionTransformFnslideTransitionFunktion für den Übergangseffekt. Eingebaut: slideTransition, fadeTransition, flipTransition, cubeTransition, zoomTransition
transitionDurationnumber300Dauer der Animation in ms
enableGesturesbooleantrueSchaltet die Navigation durch Ziehen mit Touch oder Maus ein
swipeDistanceFactornumber0.12Schwelle für das Wischen (0-1)
rangeExtractor(index: number, count: number) => number[]defaultRangeExtractorEigene Funktion, die festlegt, welche Indizes gerendert werden
keyExtractor(index: number) => string-Eigene Key-Funktion für den Abgleich von React (nützlich mit loop)
apiRefRefObject<ReelApi>-Ref für den Zugriff auf die API-Methoden
classNamestring-CSS-Klasse für das Container-Element
styleCSSProperties-Inline-Styles für das Container-Element
ariaLabelstring-Zugängliche Beschriftung der Karussell-Region, die Screenreader vorlesen

Callbacks

PropTypBeschreibung
afterChange(index, indexInRange) => voidWird aufgerufen, nachdem der Slide-Wechsel abgeschlossen ist
beforeChange(index, nextIndex, indexInRange) => voidWird aufgerufen, bevor der Slide-Wechsel beginnt
onSlideDragStart(index) => voidWird aufgerufen, wenn die Ziehgeste beginnt
onSlideDragEnd(index) => voidWird aufgerufen, wenn die Ziehgeste endet
onSlideDragCanceled(index) => voidWird aufgerufen, wenn das Ziehen abgebrochen wird

Methoden von ReelApi

Auf die Methoden des Sliders greifst du über apiRef zu:

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
MethodeTypBeschreibung
next()() => voidGeht zum nächsten Slide
prev()() => voidGeht zum vorherigen Slide
goTo(index, animate?)(number, boolean?) => PromiseGeht zu einem bestimmten Slide
adjust()() => voidBerechnet die Positionen der Slides neu
observe()() => voidBeginnt, die Tastatur zu beobachten
unobserve()() => voidHört auf, die Tastatur zu beobachten

Props von ReelIndicator

ReelIndicatorProps

PropTypStandardBeschreibung
countnumberautoGesamtzahl der Einträge. Wird vom umgebenden Reel automatisch übernommen, wenn der Indikator darin liegt; allein verwendet übergibst du ihn selbst
activenumberautoAktuell aktiver Index. Wird vom umgebenden Reel automatisch übernommen, wenn der Indikator darin liegt; allein verwendet übergibst du ihn selbst
direction'vertical' | 'horizontal''vertical'Ausrichtung des Indikators
radiusnumber3Größe der Punkte in Pixeln
visiblenumber5Höchstzahl sichtbarer Punkte in normaler Größe
gapnumber4Abstand zwischen den Punkten in Pixeln
activeColorstring'#fff'Farbe des aktiven Punkts
inactiveColorstring'rgba(255,255,255,0.5)'Farbe der inaktiven Punkte
edgeScalenumber0.5Skalierung der Punkte am überlaufenden Rand
onDotClick(index: number) => void-Callback, wenn ein Punkt angeklickt wird
classNamestring-Eigene CSS-Klasse
styleCSSProperties-Eigene Inline-Styles

Observer-Komponenten

Observe

Verbindet die Signals aus dem Core mit dem Rendern in React, ohne das Elternelement neu zu rendern. Nur die Funktion in children läuft erneut, wenn sich abonnierte Signals ändern.

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

<Observe signals={[controller.state.index]}>
  {() => <span>Current: {controller.state.index.value}</span>}
</Observe>
PropTypStandardBeschreibung
signalsSubscribable[]requiredSignals, die abonniert werden. Meldet sich eines davon, läuft die Funktion in children erneut – und nur diese, nie das Elternelement. Ein anderes Signal bei einem späteren Render wird an Stelle des ersetzten verfolgt.
children() => ReactElement | nullrequiredRender-Funktion, die bei jeder Änderung erneut läuft. Lies die Werte der Signals darin; ein außerhalb gelesener Wert wird einmal festgehalten und veraltet.

AnimatedObserve

Abonniert Signals mit animierten Werten und interpoliert sie weich per requestAnimationFrame.

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

<AnimatedObserve signal={controller.state.axisValue}>
  {(value) => (
    <div style={{ transform: `translateY(${value}px)` }} />
  )}
</AnimatedObserve>
PropTypStandardBeschreibung
signalSignal<AnimatedValue>requiredSignal, das { value, duration, done? } ausgibt. Eine Dauer über 0 interpoliert vom aktuellen Wert zum neuen; bei 0 springt der Wert direkt dorthin.
children(value: number) => ReactElementrequiredRender-Funktion, die den interpolierten Wert für den aktuellen Frame bekommt. Er wird synchron übernommen, damit das DOM mit der Animation Schritt hält.

SwipeToClose

<SwipeToClose> legt seine Kinder in einen Container, der einem vertikalen Wischen folgt und onClose aufruft, sobald das Wischen die Schwelle überschreitet — die Geste zum Schließen der Lightbox und des Stories Player, für ein eigenes Overlay. SwipeToCloseProps typisiert seine Props; SwipeToCloseDirection ist 'up' | 'down'.

PropTypStandardBeschreibung
directionSwipeToCloseDirectionPflicht'up' schließt wie die Lightbox, 'down' wie der Stories Player
onClose() => voidPflichtWird aufgerufen, nachdem das Wischen die Schwelle überschritten hat und die Animation zum Schließen endet
enabledbooleantrueSchaltet die Geste ab, ohne auszuhängen
thresholdnumber0.2Anteil der Höhe des Viewports, den das Wischen zurücklegen muss
classNamestring—Klasse am äußeren <div>
childrenReactNodePflichtInhalt, der sich mit dem Wischen bewegt

SoundProvider

<SoundProvider> erstellt einen SoundController, anfangs stumm, und reicht ihn über useSoundState an seine Kinder weiter. Die Overlays rendern selbst einen; füge deinen eigenen nur um einen eigenen Player hinzu, dessen Bedienelemente sich eine Stummschaltung teilen.

Hooks

useBodyLock

Sperrt das Scrollen des Body und gleicht die Verschiebung durch die Breite der Scrollbar aus.

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

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

useOverlayUrlState

OverlayUrlStateOptions

Baut einen URL-State-Controller für ein Overlay, den du einem *UrlOverlay als Prop controller übergibst.

Eine Schritt-für-Schritt-Erklärung und Beispiele findest du unter URL-State im React-Leitfaden.

OptionTypStandardBeschreibung
paramstringPflichtQuery-Parameter, der den aktiven Slide trägt, zum Beispiel "photo". Wird beim ersten Render gelesen und bleibt für die Lebensdauer der Komponente fest – zum Ändern neu mounten (gib ihr einen key).
adapterUrlAdapterHistory APINavigationssystem, über das gelesen und geschrieben wird. Übergib in einer App mit Router einen Adapter auf Basis des Routers, damit die Location des Routers nicht veraltet. Wird beim ersten Render gelesen und bleibt für die Lebensdauer der Komponente fest – zum Ändern neu mounten.
codec{ decode(raw) => Id | null; encode(id) => string }PflichtFormat in der URL: Text des Parameters ↔ eine stabile Identität, unabhängig von der Sammlung. Reist mit locator als zusammengehöriges Paar mit demselben Id – spreize ...urlIndexKey(() => images.length) für die Standardgalerie mit Index ?photo=3, oder bring einen eigenen mit (base64, slug), damit ein Lesezeichen das Umsortieren der Galerie übersteht. Wird live gelesen: Der codec des letzten Renders übernimmt das nächste Decodieren oder Encodieren.
locator{ locate(id) => number | null; locateAsync?(id) => Promise<number | null>; identify(index) => id }PflichtBildet die Identität auf eine Position ab und prüft ihre Gültigkeit selbst: locate (synchron), locateAsync (asynchroner Fallback für eine Galerie mit Paginierung), identify (Schreiben). Für eine einfache Galerie mit Index spreizt du ...urlIndexKey(() => images.length) – es liefert diesen locator plus den passenden codec und begrenzt ?photo=3 mit der aktuellen Anzahl, sodass ein veraltetes ?photo=99 von selbst aus der URL verschwindet, statt einen Slide zu öffnen, den nie jemand gemeint hat. Ein Feed mit Paginierung oder eine Galerie mit Schlüsseln nach Identität bringt stattdessen ein eigenes passendes Paar aus codec + locator mit. Wird live gelesen: Der locator des letzten Renders beantwortet die nächste Suche, und wird locateAsync zwischen zwei Renders hinzugefügt oder entfernt, wirkt das beim nächsten Fehlschlag.

useReactRouterUrlAdapter

Ein UrlAdapter auf Basis von React Router. Übergib ihn in einer App mit Router als Option adapter an useOverlayUrlState, damit der Router die einzige Quelle der Wahrheit für die Navigation bleibt – wer am Router vorbei history.pushState schreibt, lässt seine Location veralten, und die nächste Navigation verliert den Parameter. Geschrieben wird nur die Query, Pfad und Hash bleiben also unberührt. Jede Änderung meldet, ob der Router auf derselben Seite einen Eintrag angelegt, ersetzt oder sich durch den Verlauf bewegt hat, sodass eine aus einem <Link> geöffnete Galerie mit einem Schritt zurück schließt.

Kommt aus einem eigenen Subpfad, damit eine App ohne Router nie react-router-dom in ihr Bundle zieht. react-router-dom ist eine optionale Peer-Abhängigkeit.

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

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

useReelContext

useReelContext() liest den ReelContextValue des nächsten übergeordneten <Reel> oder gibt außerhalb davon null zurück. <ReelIndicator> verbindet sich darüber selbst; nutze es in deinen eigenen Bedienelementen, die du als Kinder von <Reel> renderst, damit sie dem Slider ohne Props folgen. ReelContext ist das Context-Objekt dahinter — stelle nur in einem Test oder einem eigenen Wrapper einen eigenen Wert bereit.

EigenschaftTypBeschreibung
indexSignal<number>Index des aktiven Slides; lies .value innerhalb von Observe
countSignal<number>Gesamtzahl der Slides
goTo(index: number, animate?: boolean) => Promise<void>Geht zu einem Slide, animiert oder nicht

useSoundState

useSoundState() liest den SoundController aus dem nächsten <SoundProvider> und wirft außerhalb davon einen Fehler. Der Reel Player, die Lightbox und der Stories Player legen einen Provider um ihren Inhalt, sodass eigene Bedienelemente, die du über ihre Render-Props übergibst, damit die Stummschaltung lesen oder umschalten können.

useFullscreen

useFullscreen({ ref }) steuert die Fullscreen-API für das Element in ref und beendet das Vollbild, wenn die Komponente ausgehängt wird. UseFullscreenProps ist sein Argument; UseFullscreenResult ist das Tupel, das es zurückgibt.

IndexTypBeschreibung
[0]Signal<boolean>Ob die Seite im Vollbild ist; lies .value innerhalb von Observe
[1]() => Promise<void>Fordert das Vollbild für das Element an und verlässt vorher ein anderes Element im Vollbild
[2]() => Promise<void>Beendet das Vollbild
[3]() => Promise<void>Wechselt zwischen beidem

Barrierefreiheit

<Reel> rendert als role="region" mit aria-roledescription="carousel". Setze das Prop ariaLabel, um der Region einen Namen für Screenreader zu geben. Eine höfliche Live-Region kündigt bei jedem Slide-Wechsel "Slide N von M" an, ohne das Karussell neu zu rendern. Inaktive Slides bekommen das Attribut inert, damit Fokus und Navigation von Hilfstechnologien sie überspringen.

<ReelIndicator> rendert als role="tablist" mit wanderndem tabindex auf den Punkten; die Pfeiltasten bewegen den Fokus, und Enter oder Leertaste aktivieren den Slide.

Du baust ein eigenes Modal um <Reel>? captureFocusForReturn, createFocusTrap und getFocusableElements werden aus @reelkit/react erneut exportiert, für die Rückgabe und das Einsperren des Fokus.

Hilfsfunktionen

createDefaultKeyExtractorForLoop

Erzeugt einen Key-Extractor, der doppelte Indizes behandelt, wenn loop eingeschaltet ist.

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

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

Größenerkennung

observeElementSize, getViewportSize, observeViewportSize, isMobileWidth, fitAspectRatio und isTouchDevice werden aus @reelkit/react erneut exportiert, für ein eigenes Overlay, das seine Größe so bestimmt wie die Overlays von reelkit. Siehe Größenerkennung in der Core-API.

Autoplay und Download

Auch createTimerController, createSlideshowController und downloadFile werden aus @reelkit/react erneut exportiert: der Timer hinter dem Stories Player, die Slideshow hinter autoAdvance der Lightbox und die Hilfsfunktion hinter ihrem Download-Button. Siehe Autoplay und Download in der Core-API.