Gesture handlers let your app respond to touches like taps, swipes, and drags. They make your app feel smooth and natural.
Gesture Handler integration in React Native
import { GestureHandlerRootView, TapGestureHandler } from 'react-native-gesture-handler'; import { View } from 'react-native'; function MyComponent() { const onSingleTap = () => { console.log('Tapped!'); }; return ( <GestureHandlerRootView style={{ flex: 1 }}> <TapGestureHandler onActivated={onSingleTap}> <View style={{ width: 100, height: 100, backgroundColor: 'blue' }} /> </TapGestureHandler> </GestureHandlerRootView> ); }
Always wrap your app or screen with GestureHandlerRootView to enable gesture handling.
Use specific gesture handlers like TapGestureHandler, PanGestureHandler, etc., for different gestures.
import { GestureHandlerRootView, TapGestureHandler } from 'react-native-gesture-handler'; import { View } from 'react-native'; <TapGestureHandler onActivated={() => alert('Tapped!')}> <View style={{ width: 50, height: 50, backgroundColor: 'red' }} /> </TapGestureHandler>
import { GestureHandlerRootView, PanGestureHandler } from 'react-native-gesture-handler'; import { View } from 'react-native'; <PanGestureHandler onGestureEvent={event => console.log(event.nativeEvent.translationX)}> <View style={{ width: 100, height: 100, backgroundColor: 'green' }} /> </PanGestureHandler>
This app shows a blue box in the center. When you tap the box, an alert pops up saying "You tapped the box!". The whole screen is wrapped in GestureHandlerRootView to enable gestures.
import React from 'react'; import { View, Text, StyleSheet, Alert } from 'react-native'; import { GestureHandlerRootView, TapGestureHandler } from 'react-native-gesture-handler'; export default function App() { const onTap = () => { Alert.alert('You tapped the box!'); }; return ( <GestureHandlerRootView style={styles.container}> <TapGestureHandler onActivated={onTap}> <View style={styles.box} /> </TapGestureHandler> <Text style={styles.text}>Tap the blue box</Text> </GestureHandlerRootView> ); } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center' }, box: { width: 150, height: 150, backgroundColor: 'blue', borderRadius: 10 }, text: { marginTop: 20, fontSize: 18 } });
Make sure to install and link react-native-gesture-handler properly before using it.
Wrap your app's root component with GestureHandlerRootView to avoid gesture conflicts.
Gesture handlers provide better performance and flexibility than default touchables.
Gesture Handler lets you detect and respond to user touches like taps and swipes.
Wrap your app with GestureHandlerRootView to enable gestures.
Use specific handlers like TapGestureHandler for different gestures.
Practice
GestureHandlerRootView?Solution
Step 1: Understand the role of GestureHandlerRootView
This component is required to wrap the app so that gesture detection works properly across all child components.Step 2: Differentiate from other purposes
Styling, performance caching, or navigation are unrelated to GestureHandlerRootView's function.Final Answer:
To enable gesture detection and handling throughout the app -> Option AQuick Check:
GestureHandlerRootView enables gestures [OK]
- Thinking it styles the app
- Confusing it with navigation setup
- Assuming it improves performance
Solution
Step 1: Recall correct import syntax
TapGestureHandler is a named export from 'react-native-gesture-handler', so it must be imported with curly braces.Step 2: Eliminate incorrect imports
Default import without braces is wrong, importing from 'react-native' is incorrect, and importing from a subpath is not standard.Final Answer:
import { TapGestureHandler } from 'react-native-gesture-handler'; -> Option CQuick Check:
Named imports use curly braces [OK]
- Using default import instead of named import
- Importing from 'react-native' instead of gesture-handler
- Trying to import from a subpath
import { TapGestureHandler, GestureHandlerRootView } from 'react-native-gesture-handler';
import React from 'react';
import { View, Text, Alert } from 'react-native';
export default function App() {
const onTap = () => Alert.alert('Box tapped!');
return (
);
}Solution
Step 1: Understand TapGestureHandler usage
The onActivated prop triggers the callback when the tap gesture is recognized.Step 2: Analyze the code behavior
When the blue box is tapped, the onTap function runs, showing an alert with 'Box tapped!'.Final Answer:
An alert saying 'Box tapped!' will appear when the blue box is tapped -> Option AQuick Check:
onActivated triggers alert on tap [OK]
- Confusing onActivated with onPress
- Assuming no effect without extra setup
- Expecting color change without code
import { TapGestureHandler } from 'react-native-gesture-handler';
import React from 'react';
import { View } from 'react-native';
export default function App() {
const onTap = () => console.log('Tapped');
return (
);
}Solution
Step 1: Check for GestureHandlerRootView presence
Gesture handlers require the app to be wrapped in GestureHandlerRootView to work properly.Step 2: Evaluate other options
onActivated is correct, View can detect gestures, and size 100x100 is sufficient.Final Answer:
The app is missing the GestureHandlerRootView wrapper -> Option BQuick Check:
Missing GestureHandlerRootView blocks gestures [OK]
- Using onPress instead of onActivated
- Thinking View can't detect gestures
- Assuming size is too small
Solution
Step 1: Understand gesture handler nesting
To detect multiple gestures on the same view, nest handlers so gestures can be recognized distinctly.Step 2: Evaluate options
Using only TapGestureHandler can't detect long press, siblings won't work well on same view, PanGestureHandler is for drag gestures.Final Answer:
Nest LongPressGestureHandler inside TapGestureHandler and handle callbacks separately -> Option DQuick Check:
Nesting handlers enables multiple gesture detection [OK]
- Trying to detect long press with TapGestureHandler only
- Using sibling handlers on same view without nesting
- Confusing PanGestureHandler with tap/long press
Ready to prove it?
Pass the test and this pattern moves unknown
