Pressable — was ist das, Druckverarbeitung in React Native

Autor: IT Sectr Veröffentlicht: 2026-07-06 Lesezeit: 10 Min.

Pressable ist eine moderne React Native Komponente zur Berührungsverarbeitung, die die veralteten TouchableHighlight, TouchableOpacity und TouchableWithoutFeedback ersetzt. Pressable bietet eine einheitliche API mit Erkennung der Zustände pressed, hovered und focused. Die Komponente wurde in React Native 0.63 eingeführt und wird von Meta für alle neuen Projekte empfohlen. Weitere Informationen finden Sie in der Meta-Dokumentation.

Wichtige Punkte

  • Pressable — eine universelle Komponente zur Berührungsverarbeitung mit Unterstützung für pressed-, hovered- und focused-Zustände
  • API umfasst onPress-, onLongPress-, onPressIn-, onPressOut-Callbacks und eine zustandsbasierte Styling-Funktion
  • hitSlop erweitert den Berührungsbereich über die sichtbaren Komponentengrenzen hinaus zur Verbesserung der UX
  • Touchable-Ersatz — Pressable vereinheitlicht die API aller Touchable-Komponenten in einer flexiblen Schnittstelle
  • Barrierefreiheit — die Komponente unterstützt ARIA-Rollen und verarbeitet automatisch VoiceOver und TalkBack

Was ist Pressable?

Pressable ist eine React Native Komponente, die eine einheitliche Schnittstelle zur Verarbeitung aller Arten von Berührungen bietet. Im Gegensatz zu drei verschiedenen Touchable-Komponenten (TouchableHighlight, TouchableOpacity, TouchableWithoutFeedback) ersetzt Pressable sie alle durch ein flexibles Zustands- und Styling-System.

Die Komponente wurde in React Native 0.63 (September 2020) eingeführt. Laut Meta (2026) verwenden 70% der neuen React Native Projekte Pressable anstelle von Touchable-Komponenten. Pressable löst das Hauptproblem von Touchable — eine fragmentierte API und die Notwendigkeit, zwischen Komponenten für verschiedene Effekte zu wechseln.

Philosophie von Pressable

Im Gegensatz zu TouchableOpacity, wo der Drück-Effekt fest vorgegeben ist (Opazitätsänderung), stellt Pressable eine Funktion bereit, die den aktuellen Zustand erhält. Der Entwickler entscheidet, wie visuell auf einen Druck reagiert wird: Farbänderung, Skalierung, Schatten oder eine Kombination von Effekten. Dies gibt volle Kontrolle über die UX.

Pressable-Zustände: pressed, hovered, focused

Pressable definiert drei Interaktionszustände: pressed (Finger auf Bildschirm), hovered (Cursor über Element auf Web/TV), focused (Element im Tastaturfokus). Jeder Zustand löst den entsprechenden Callback aus und wird an die Styling-Funktion und die Child-Render-Funktion übergeben.

ZustandBedingungTypische Reaktion
pressedFinger auf Bildschirm oder Klick gedrücktÄnderung von Opazität, Skalierung oder Hintergrundfarbe
hoveredCursor über Element (Web, TV)Hervorhebung, Schatten, Unterstreichung
focusedElement im TastaturfokusUmriss, Rahmen, Farbänderung

Wichtig: hovered und focused funktionieren nur auf Plattformen mit Zeigerunterstützung (Web, Android TV, Apple TV). Auf mobilen Geräten ist nur pressed verfügbar. Für plattformübergreifende Anwendungen gestalten Sie visuelle Reaktionen unter Berücksichtigung dieser Einschränkung.

js
<Pressable
  style={({ pressed }) => [
    styles.button,
    pressed && styles.buttonPressed,
  ]}
  onPress={handlePress}>
  {({ pressed }) => (
    <Text style={pressed ? styles.textPressed : styles.text}>
      {pressed ? 'Release' : 'Press'}
    </Text>
  )}
</Pressable>

Pressable API und Callbacks

Die Pressable API umfasst vier Haupt-Callbacks: onPress (vollständiger Druck mit Loslassen), onLongPress (langer Druck), onPressIn (Berührungsbeginn) und onPressOut (Berührungsende). Die Kombination von onPressIn und onPressOut ermöglicht die Erstellung benutzerdefinierter Animationen.

Zusätzliche Props: delayLongPress (Verzögerung des langen Drucks, Standard 500 ms), pressRetentionOffset (Bereich, außerhalb dessen der Druck abgebrochen wird), android_ripple (Ripple-Effekt auf Android). Hinweis: Ripple funktioniert nur auf Android 5+.

js
<Pressable
  onPress={() => console.log('Gedrückt')}
  onLongPress={() => console.log('Langes Drücken')}
  onPressIn={() => console.log('Finger runter')}
  onPressOut={() => console.log('Finger hoch')}
  delayLongPress={300}
  android_ripple={{ color: 'rgba(0,0,0,0.1)', borderless: false }}
  style={styles.button}>
  <Text>Press me</Text>
</Pressable>

onPress wird nur aufgerufen, wenn der Finger innerhalb des Komponentenbereichs (unter Berücksichtigung von pressRetentionOffset) angehoben wird. Wenn der Benutzer seinen Finger außerhalb der Grenzen bewegt, wird onPress nicht ausgelöst, was falsche Drucke verhindert. onPressOut wird beim Loslassen in jedem Fall aufgerufen.

hitSlop: Erweiterung des Berührungsbereichs

hitSlop ist eine Pressable-Prop, die den Berührungsbereich über die sichtbaren Komponentengrenzen hinaus erweitert. Dies ist kritisch für kleine Elemente: Symbole, Kontrollkästchen, Optionsschaltflächen. Apple HIG empfiehlt eine minimale Berührungszielgröße von 44×44 Punkten. hitSlop ermöglicht die Einhaltung dieser Anforderung ohne Änderung der visuellen Größe.

hitSlop akzeptiert ein Objekt { top, bottom, left, right } oder eine einzelne Zahl für alle Seiten. Werte werden in logischen Pixeln (dp/pt) angegeben. Für 24×24 Symbole wird ein hitSlop von mindestens 10–12 auf jeder Seite empfohlen, um das 44×44 Berührungsziel zu erreichen.

js
<Pressable
  hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
  onPress={handleIconPress}
  style={styles.iconButton}>
  <Icon name="star" size={24} />
</Pressable>

pressRetentionOffset — das Gegenteil von hitSlop: definiert den Bereich, in dem der Benutzer die Komponentengrenzen verlassen kann, ohne den Druck abzubrechen. Standardmäßig gleich hitSlop. Wenn der Druck beim Verlassen der Grenzen bestehen bleiben soll, erhöhen Sie pressRetentionOffset.

Pressable vs Touchable: wann umsteigen

Pressable vs Touchable — eine Schlüsselfrage bei der Auswahl einer Komponente zur Berührungsverarbeitung. TouchableOpacity, TouchableHighlight und TouchableWithoutFeedback sind veraltete Komponenten, die nicht entfernt werden, aber keine neuen Funktionen erhalten. Meta empfiehlt Pressable für neue Projekte.

Hauptvorteile von Pressable: eine einheitliche API für alle Effekttypen, Zugriff auf den pressed-Zustand für benutzerdefiniertes Styling, Unterstützung für hovered/focused-Zustände, hitSlop und pressRetentionOffset, onLongPress-Callback ohne zusätzliche Konfiguration. TouchableOpacity ist nur für einfache Opazitätsänderungen geeignet.

SzenarioTouchablePressable
Einfacher DruckTouchableOpacityPressable + opacity in style
Hintergrund-HervorhebungTouchableHighlightPressable + backgroundColor
Kein visueller EffektTouchableWithoutFeedbackPressable mit leerem style
Langer DruckonLongPress auf jedem TouchableonLongPress auf Pressable
Benutzerdefinierte AnimationAnimated + onPressIn/OutPressable + useAnimatedStyle
Ripple auf AndroidTouchableNativeFeedbackPressable + android_ripple

Pressable-Anwendungsbeispiele

Pressable ermöglicht die Erstellung komplexer interaktiver Elemente mit minimalem Code. Nachfolgend ein Beispiel für einen animierten Button mit Skalierungsänderung bei Druck und Ripple-Effekt auf Android. Ein solcher Button ersetzt die Kombination von TouchableOpacity + Animated.

js
const AnimatedButton = ({ title, onPress }) => {
  const scale = React.useRef(new Animated.Value(1)).current;

  const handlePressIn = () => {
    Animated.spring(scale, {
      toValue: 0.96,
      useNativeDriver: true,
    }).start();
  };

  const handlePressOut = () => {
    Animated.spring(scale, {
      toValue: 1,
      friction: 3,
      useNativeDriver: true,
    }).start();
  };

  return (
    <Pressable
      onPress={onPress}
      onPressIn={handlePressIn}
      onPressOut={handlePressOut}
      android_ripple={{ color: 'rgba(255,255,255,0.3)' }}
      style={styles.button}>
      <AnimatedView style={[styles.inner, { transform: [{ scale }] }]}>
        <Text style={styles.text}>{title}</Text>
      </AnimatedView>
    </Pressable>
  );
};

Wichtig: Verwenden Sie useNativeDriver: true für Animationen in Pressable. Dies lagert die Animation in den nativen Thread aus und verhindert Bildrateneinbrüche bei schnellen Drücken. Der native Treiber wird für transform und opacity auf allen Plattformen unterstützt.

Häufig gestellte Fragen

Kann ich Pressable anstelle von TouchableOpacity verwenden, ohne den Code zu ändern?

Nein, Pressable hat eine andere API. TouchableOpacity wendet beim Drücken automatisch Opazität an. Pressable erfordert die explizite Angabe des Stils über eine Zustandsfunktion. Der Ersatz ist trivial: übergeben Sie style={({ pressed }) => [{ opacity: pressed ? 0.5 : 1 }]}.

Wie erstelle ich einen Ripple-Effekt wie in Material Design?

Verwenden Sie die Prop android_ripple mit einem Objekt { color, borderless }. Die Ripple-Farbe wird im rgba-Format angegeben. Für runde Schaltflächen verwenden Sie borderless: true. Ripple funktioniert nur auf Android 5+. Auf iOS verwenden Sie eine benutzerdefinierte Animation.

Warum wird onPress bei schnellem Scrollen nicht ausgelöst?

Pressable verfügt über einen integrierten Schutz gegen versehentliche Drücke beim Scrollen. Wenn der Benutzer eine Liste scrollt, wird onPress nicht aufgerufen. Dieses Verhalten kann über pressRetentionOffset und delayPressIn konfiguriert werden.

Wie verfolge ich einen langen Druck mit Pressable?

Verwenden Sie die Prop onLongPress — integrierte Unterstützung für langen Druck. Die Verzögerung wird über delayLongPress (Standard 500 ms) konfiguriert. Für Kontextmenüs und Drag-and-Drop kombinieren Sie onLongPress mit onPressIn.

Unterstützt Pressable die Tastaturnavigation?

Ja, Pressable unterstützt den focused-Zustand für die Tastaturnavigation auf Android TV, Apple TV und Web. Verwenden Sie Styling über { focused }, um den Fokus anzuzeigen. Auf mobilen Geräten ist der focused-Zustand nicht anwendbar.

Zusammenfassung

  • Pressable — eine universelle React Native Komponente zur Berührungsverarbeitung, die TouchableOpacity, TouchableHighlight und TouchableWithoutFeedback ersetzt
  • Zustände pressed, hovered, focused werden an die Styling-Funktion übergeben und ermöglichen die Anpassung der Reaktion für jedes Szenario
  • hitSlop erweitert das Berührungsziel auf 44×44 Punkte ohne Änderung der visuellen Größe und verbessert die UX bei kleinen Elementen
  • API umfasst onPress, onLongPress, onPressIn, onPressOut mit konfigurierbarer Verzögerung über delayLongPress
  • android_ripple fügt einen Material Design Ripple-Effekt auf Android 5+ mit anpassbarer Farbe und Form hinzu
  • Migration von Touchable erfordert das Ersetzen automatischer Effekte durch explizites Styling über eine Zustandsfunktion
  • Animated + Pressable erzeugen flüssige Druckanimationen mit useNativeDriver für Leistung

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch