Progression
0 %
0/32 étapes terminées
Fondamental · 6 min de lecture
Pressable et les gestes d'appui
Des boutons qui se sentent sous le doigt
1Définition
Pressable enveloppe n'importe quel contenu et détecte les différentes phases d'un appui : début, fin, appui long, survol sur les plateformes qui en disposent.
2Principes fondamentaux
01
Le cycle d'un appui
onPressIn au contact, onPressOut au relâchement, puis onPress si l'appui était court, ou onLongPress s'il a duré.
02
Le retour visuel
style et children peuvent être des fonctions recevant { pressed } : on adapte l'apparence pendant l'appui.
03
Accessibilité
Ajoute accessibilityRole="button" et un accessibilityLabel quand le contenu n'est pas du texte explicite (une icône par exemple).
3Exemples pratiques
Un bouton J'aime
1import { useState } from 'react';2import { View, Text, Pressable } from 'react-native';3 4export default function App() {5 const [aime, setAime] = useState(false);6 7 return (8 <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>9 <Pressable10 accessibilityRole="button"11 accessibilityLabel={aime ? 'Retirer le j’aime' : 'Aimer'}12 onPress={() => setAime(!aime)}13 hitSlop={12}14 style={({ pressed }) => ({ transform: [{ scale: pressed ? 0.85 : 1 }] })}15 >16 <Text style={{ fontSize: 64, color: aime ? '#d02f1c' : '#aca693' }}>{aime ? '♥' : '♡'}</Text>17 </Pressable>18 </View>19 );20}Le cœur rétrécit sous le doigt, change d'état à l'appui, et reste accessible aux lecteurs d'écran.
4Erreurs courantes
Utiliser onClick
À éviter
<Pressable onClick={ouvrir}>À faire
<Pressable onPress={ouvrir}>Pourquoi : onClick n'existe pas sur mobile ; l'événement ne se déclenchera jamais sur téléphone.
Appeler la fonction au lieu de la passer
À éviter
<Pressable onPress={supprimer(item.id)}>À faire
<Pressable onPress={() => supprimer(item.id)}>Pourquoi : Avec les parenthèses, la suppression s'exécute pendant le rendu, pour chaque élément, sans aucun appui.
Une icône minuscule
À éviter
<Pressable onPress={fermer}> <Text style={{ fontSize: 12 }}>✕</Text></Pressable>À faire
<Pressable onPress={fermer} hitSlop={16}> <Text style={{ fontSize: 12 }}>✕</Text></Pressable>Pourquoi : La zone tactile réelle doit approcher 44 points : hitSlop l'agrandit sans changer le design.
5Subtilités à connaître
- ◆
delayLongPressrègle la durée avantonLongPress(500 ms par défaut). - ◆
android_rippleajoute l'effet d'onde natif d'Android. - ◆
disabledbloque les appuis ; pense à le refléter visuellement.
6Vérifie ta compréhension
Question 1/3
Score 0
Quel événement arrive en premier ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.