Gesture Handler (RNGH) move o reconhecimento de toque para a camada nativa, de modo que pans, pinches e composições multi-toque permaneçam a 60fps. No Expo SDK 57, instale-o junto com Reanimated 4 e conduza valores animados a partir de callbacks de gestos na thread da UI.
Sem GestureHandlerRootView - Gestos nunca ativam; nenhum erro em tempo de compilação. Correção: Envolva a raiz de app/_layout.tsx.
setState em onUpdate - Descarta frames imediatamente. Correção: Valores compartilhados + useAnimatedStyle; runOnJS apenas no final.
Pan sem activeOffset - Linhas horizontais de swipe roubam o scroll vertical. Correção:activeOffsetX + ajuste de failOffsetY por layout.
Múltiplos GestureDetector aninhados - O pai pode consumir toques antes do filho. Correção: Compor com referências de scroll Simultaneous / Native em vez de empilhar detectores.
TouchableOpacity dentro de GestureDetector - Feedback duplo ou toques cancelados. Correção: Use Gesture.Tap() ou Pressable com planejamento de pointerEvents.
Plugin Reanimated ausente - onUpdate lança erros de worklet. Correção:react-native-reanimated/plugin por último na configuração do Babel.
Testando no Expo Go após upgrade nativo - O cliente de desenvolvimento antigo não possui os bits nativos do RNGH. Correção: Reconstrua o cliente de desenvolvimento ou use o Expo Go atual correspondente ao SDK 57.
Adicione GestureHandlerRootView à raiz do layout. Certifique-se de que o plugin Babel do Reanimated seja o último.
Por que usar Gesture.Pan em vez de PanResponder?
RNGH reconhece na thread nativa com melhor entrega de scroll.
A API compõe-se de forma limpa (Simultaneous, Race) e integra-se com worklets do Reanimated.
Para que serve o activeOffsetX?
O dedo deve se mover horizontalmente N pixels antes que o pan ative. Isso permite que o scroll vertical vença quando o usuário rola uma lista contendo linhas deslizáveis.
Posso anexar múltiplos gestos a uma view?
Sim - construa um gesto composto e passe-o para um único GestureDetector. Não aninhe múltiplos detectores na mesma view sem um plano de composição.
FlatList deve vir do RNGH ou do react-native?
Comece com a FlatList do RN. Mude a lista horizontal interna para a FlatList do RNGH quando os gestos de scroll aninhados falharem no Android (Scrollables Aninhados).
Como os gestos interagem com as stacks do Expo Router?
O swipe-back da stack é um gesto nativo. Pans de tela cheia personalizados podem precisar de gestureEnabled: false na tela ou simultaneousWithExternalGesture cuidadoso - veja Resolução de Conflitos de Gestos.
Preciso de react-native-reanimated para gestos?
Não estritamente para reconhecimento, mas toda atualização de UI de alta frequência deve usar valores compartilhados do Reanimated. setState por frame de pan causará travamentos.