Bird
Raised Fist0
React Nativemobile~20 mins

Gesture Handler integration in React Native - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Gesture Handler Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
What happens when you tap the button wrapped with TapGestureHandler?

Consider this React Native code using Gesture Handler:

import { TapGestureHandler } from 'react-native-gesture-handler';
import { View, Text } from 'react-native';

export default function App() {
  const onSingleTap = () => alert('Tapped!');

  return (
    
      
        Tap me
      
    
  );
}

What is the expected behavior when the user taps the text?

React Native
import { TapGestureHandler } from 'react-native-gesture-handler';
import { View, Text } from 'react-native';

export default function App() {
  const onSingleTap = () => alert('Tapped!');

  return (
    <TapGestureHandler onActivated={onSingleTap}>
      <View style={{ padding: 20, backgroundColor: '#ddd' }}>
        <Text>Tap me</Text>
      </View>
    </TapGestureHandler>
  );
}
AThe text changes color but no alert appears.
BAn alert with message 'Tapped!' appears when the user taps the text.
CNothing happens because TapGestureHandler requires a double tap to activate.
DThe app crashes because onActivated is not a valid prop for TapGestureHandler.
Attempts:
2 left
💡 Hint

Check the onActivated prop of TapGestureHandler and what it triggers.

❓ lifecycle
intermediate
2:00remaining
When does the onGestureEvent callback fire in PanGestureHandler?

In React Native Gesture Handler, the PanGestureHandler has an onGestureEvent prop.

When does this callback get called?

React Native
import { PanGestureHandler } from 'react-native-gesture-handler';
import { View } from 'react-native';

export default function App() {
  const onGestureEvent = event => {
    console.log('Gesture event:', event.nativeEvent.translationX);
  };

  return (
    <PanGestureHandler onGestureEvent={onGestureEvent}>
      <View style={{ flex: 1, backgroundColor: '#eee' }} />
    </PanGestureHandler>
  );
}
AIt fires continuously as the user moves their finger during the pan gesture.
BIt fires only once when the pan gesture starts.
CIt fires only when the pan gesture ends.
DIt never fires unless the gesture is a double tap.
Attempts:
2 left
💡 Hint

Think about how dragging your finger on the screen updates position continuously.

📝 Syntax
advanced
2:00remaining
Which code correctly imports and wraps the app with GestureHandlerRootView?

To use React Native Gesture Handler properly, the app root must be wrapped with GestureHandlerRootView.

Which option shows the correct import and usage?

A
import { GestureHandlerRootView } from 'react-native-gesture-handler';

export default function App() {
  return (
    &lt;View style={{ flex: 1 }}&gt;
      &lt;GestureHandlerRootView&gt;
        {/* app content */}
      &lt;/GestureHandlerRootView&gt;
    &lt;/View&gt;
  );
}
B
import GestureHandlerRootView from 'react-native-gesture-handler';

export default function App() {
  return (
    &lt;GestureHandlerRootView style={{ flex: 1 }}&gt;
      {/* app content */}
    &lt;/GestureHandlerRootView&gt;
  );
}
C
import { GestureHandlerRootView } from 'react-native-gesture-handler';

export default function App() {
  return (
    &lt;GestureHandlerRootView style={{ flex: 1 }}&gt;
      {/* app content */}
    &lt;/GestureHandlerRootView&gt;
  );
}
D
import { GestureHandlerRootView } from 'react-native-gesture-handler';

export default function App() {
  return (
    &lt;GestureHandlerRootView&gt;
      {/* app content */}
    &lt;/GestureHandlerRootView&gt;
  );
}
Attempts:
2 left
💡 Hint

Check the import syntax and the style prop on GestureHandlerRootView.

❓ navigation
advanced
2:00remaining
How to combine Gesture Handler with React Navigation for swipe back gesture?

You want to enable swipe back gesture on iOS using React Navigation and Gesture Handler.

Which approach correctly integrates them?

AWrap the navigation container with GestureHandlerRootView and enable gestureEnabled on stack screens.
BUse PanGestureHandler inside each screen component to detect swipe and call navigation.goBack().
CDisable GestureHandlerRootView and rely only on React Navigation's default gestures.
DWrap each screen with TapGestureHandler to detect taps and trigger navigation.goBack().
Attempts:
2 left
💡 Hint

Think about where GestureHandlerRootView should be placed and React Navigation's gesture options.

🔧 Debug
expert
2:00remaining
Why does the PanGestureHandler not respond to gestures in this code?

Look at this React Native code snippet:

import { PanGestureHandler } from 'react-native-gesture-handler';
import { View } from 'react-native';

export default function App() {
  const onGestureEvent = event => console.log(event.nativeEvent.translationX);

  return (
    
      
        
      
    
  );
}

The red square does not respond to pan gestures. What is the most likely cause?

React Native
import { PanGestureHandler } from 'react-native-gesture-handler';
import { View } from 'react-native';

export default function App() {
  const onGestureEvent = event => console.log(event.nativeEvent.translationX);

  return (
    <View style={{ flex: 1 }}>
      <PanGestureHandler onGestureEvent={onGestureEvent}>
        <View style={{ width: 100, height: 100, backgroundColor: 'red' }} />
      </PanGestureHandler>
    </View>
  );
}
AThe PanGestureHandler child View has no flex or position style, so it does not receive touch events.
BThe onGestureEvent callback is incorrectly defined and causes a runtime error.
CThe PanGestureHandler must be wrapped inside a ScrollView to work.
DThe GestureHandlerRootView is missing, so gestures are not recognized.
Attempts:
2 left
💡 Hint

Remember the required root wrapper for Gesture Handler to work properly.

Practice

(1/5)
1. What is the main purpose of wrapping your React Native app with GestureHandlerRootView?
easy
A. To enable gesture detection and handling throughout the app
B. To style the app's background color
C. To improve app performance by caching views
D. To add navigation capabilities between screens

Solution

  1. 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.
  2. Step 2: Differentiate from other purposes

    Styling, performance caching, or navigation are unrelated to GestureHandlerRootView's function.
  3. Final Answer:

    To enable gesture detection and handling throughout the app -> Option A
  4. Quick Check:

    GestureHandlerRootView enables gestures [OK]
Hint: GestureHandlerRootView enables gestures app-wide [OK]
Common Mistakes:
  • Thinking it styles the app
  • Confusing it with navigation setup
  • Assuming it improves performance
2. Which of the following is the correct way to import the TapGestureHandler from react-native-gesture-handler?
easy
A. import { TapGestureHandler } from 'react-native';
B. import TapGestureHandler from 'react-native-gesture-handler';
C. import { TapGestureHandler } from 'react-native-gesture-handler';
D. import TapGestureHandler from 'react-native-gesture-handler/TapGestureHandler';

Solution

  1. Step 1: Recall correct import syntax

    TapGestureHandler is a named export from 'react-native-gesture-handler', so it must be imported with curly braces.
  2. 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.
  3. Final Answer:

    import { TapGestureHandler } from 'react-native-gesture-handler'; -> Option C
  4. Quick Check:

    Named imports use curly braces [OK]
Hint: Use curly braces for named imports like TapGestureHandler [OK]
Common Mistakes:
  • Using default import instead of named import
  • Importing from 'react-native' instead of gesture-handler
  • Trying to import from a subpath
3. Given this code snippet, what will happen when the user taps the blue box?
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 (
    
      
        
      
    
  );
}
medium
A. An alert saying 'Box tapped!' will appear when the blue box is tapped
B. Nothing happens because onActivated is not a valid prop
C. The app will crash due to missing gesture handler setup
D. The blue box changes color when tapped

Solution

  1. Step 1: Understand TapGestureHandler usage

    The onActivated prop triggers the callback when the tap gesture is recognized.
  2. Step 2: Analyze the code behavior

    When the blue box is tapped, the onTap function runs, showing an alert with 'Box tapped!'.
  3. Final Answer:

    An alert saying 'Box tapped!' will appear when the blue box is tapped -> Option A
  4. Quick Check:

    onActivated triggers alert on tap [OK]
Hint: onActivated fires callback on tap gesture [OK]
Common Mistakes:
  • Confusing onActivated with onPress
  • Assuming no effect without extra setup
  • Expecting color change without code
4. You wrote this code but the tap gesture is not detected. What is the likely cause?
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 (
    
      
    
  );
}
medium
A. The style width and height are too small for detection
B. The app is missing the GestureHandlerRootView wrapper
C. The View component must be a Button for gestures
D. The onActivated prop should be onPress instead

Solution

  1. Step 1: Check for GestureHandlerRootView presence

    Gesture handlers require the app to be wrapped in GestureHandlerRootView to work properly.
  2. Step 2: Evaluate other options

    onActivated is correct, View can detect gestures, and size 100x100 is sufficient.
  3. Final Answer:

    The app is missing the GestureHandlerRootView wrapper -> Option B
  4. Quick Check:

    Missing GestureHandlerRootView blocks gestures [OK]
Hint: Always wrap app with GestureHandlerRootView [OK]
Common Mistakes:
  • Using onPress instead of onActivated
  • Thinking View can't detect gestures
  • Assuming size is too small
5. You want to detect both tap and long press gestures on the same box using react-native-gesture-handler. Which approach correctly integrates both handlers?
hard
A. Use only TapGestureHandler with a long delay prop
B. Use PanGestureHandler instead for both tap and long press
C. Wrap the box in two sibling gesture handlers without nesting
D. Nest LongPressGestureHandler inside TapGestureHandler and handle callbacks separately

Solution

  1. Step 1: Understand gesture handler nesting

    To detect multiple gestures on the same view, nest handlers so gestures can be recognized distinctly.
  2. 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.
  3. Final Answer:

    Nest LongPressGestureHandler inside TapGestureHandler and handle callbacks separately -> Option D
  4. Quick Check:

    Nesting handlers enables multiple gesture detection [OK]
Hint: Nest handlers to detect multiple gestures on one view [OK]
Common Mistakes:
  • Trying to detect long press with TapGestureHandler only
  • Using sibling handlers on same view without nesting
  • Confusing PanGestureHandler with tap/long press
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard