DEV Community

Cover image for Implementing Long Press Functionality Using React Native Gesture Handler in React Native Application
MAYANK TYAGI
MAYANK TYAGI

Posted on

Implementing Long Press Functionality Using React Native Gesture Handler in React Native Application

You can implement long press functionality using libraries like React Native Gesture Handler to detect the long press gesture. This library provides more advanced and reliable gesture-handling capabilities compared to the standard React Native onLongPress event.

Here's how you can implement the long press functionality to display microfrontend version and other app info:

Step 1: Install React Native Gesture Handler

First, if you haven't already installed the react-native-gesture-handler package, install it:

npm install react-native-gesture-handler
Enter fullscreen mode Exit fullscreen mode

Make sure to link it with your project if you're using React Native CLI:

npx react-native link react-native-gesture-handler
Enter fullscreen mode Exit fullscreen mode

Step 2: Set Up Gesture Handler

After installation, wrap your app with GestureHandlerRootView in your entry point (usually index.js or App.js).

import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { App } from './App';

export default function Main() {
  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <App />
    </GestureHandlerRootView>
  );
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Implement Long Press in Your Custom Header

Now, in your custom header, use the LongPressGestureHandler to detect the long press event. You can then display a modal or a custom view showing the microfrontend version and other app info.

Here’s an example of how you could implement this:

import React, { useState } from 'react';
import { Text, View, Modal, StyleSheet } from 'react-native';
import { LongPressGestureHandler, State } from 'react-native-gesture-handler';

const CustomHeader = ({ microfrontendVersion, appInfo }) => {
  const [isModalVisible, setModalVisible] = useState(false);

  const onLongPress = (event) => {
    if (event.nativeEvent.state === State.ACTIVE) {
      // Show the modal with app info when long press is detected
      setModalVisible(true);
    }
  };

  return (
    <View>
      {/* LongPressGestureHandler wraps the part of the UI where long press is to be detected */}
      <LongPressGestureHandler onHandlerStateChange={onLongPress} minDurationMs={800}>
        <View style={styles.header}>
          <Text style={styles.headerTitle}>My Custom Header</Text>
        </View>
      </LongPressGestureHandler>

      {/* Modal to show the version and app info */}
      <Modal
        transparent={true}
        visible={isModalVisible}
        onRequestClose={() => setModalVisible(false)}
      >
        <View style={styles.modalContainer}>
          <View style={styles.modalContent}>
            <Text>Microfrontend Version: {microfrontendVersion}</Text>
            <Text>App Info: {appInfo}</Text>
            <Text onPress={() => setModalVisible(false)} style={styles.closeButton}>Close</Text>
          </View>
        </View>
      </Modal>
    </View>
  );
};

const styles = StyleSheet.create({
  header: {
    padding: 16,
    backgroundColor: '#6200EE',
  },
  headerTitle: {
    color: 'white',
    fontSize: 18,
    fontWeight: 'bold',
  },
  modalContainer: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: 'rgba(0, 0, 0, 0.5)',
  },
  modalContent: {
    backgroundColor: 'white',
    padding: 20,
    borderRadius: 10,
  },
  closeButton: {
    marginTop: 10,
    color: 'blue',
    textAlign: 'center',
  },
});

export default CustomHeader;
Enter fullscreen mode Exit fullscreen mode

Explanation:

  1. LongPressGestureHandler: Wrap the header or any component where you want to detect a long press.

    • minDurationMs={800}: This defines how long the user needs to press to trigger the long press event.
    • onHandlerStateChange: This method is triggered when the gesture's state changes.
    • Inside onLongPress, we check if the gesture is in the ACTIVE state to determine if the long press was successful, and then trigger the modal to show the information.
  2. Modal: This is used to display the microfrontend version and other app info when the long press event is triggered.

This method efficiently detects long presses and displays the required information about the microfrontend and app details.

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

Image of Docusign

πŸ› οΈ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more