onLongPress es una propiedad que se puede usar en componentes como TouchableOpacity, TouchableHighlight, Pressable, entre otros, para ejecutar una acción cuando el usuario mantiene presionado un elemento durante un período prolongado de tiempo.
Esta propiedad onLongPress recibe una función como valor que se ejecuta cuando el usuario mantiene presionado el componente por un tiempo específico (por defecto, 500 ms).
Es útil para acciones como mostrar un menú contextual, realizar una acción secundaria o activar una opción adicional.
El siguiente ejemplo muestra cómo usar onLongPress con un botón:
import React from 'react';
import { View, Text, TouchableOpacity, Alert, StyleSheet } from 'react-native';
const EjemploLongPress = () => {
const handleLongPress = () => {
Alert.alert('¡Pulsación larga detectada!');
};
return (
<View style={styles.container}>
<TouchableOpacity
style={styles.boton}
onLongPress={handleLongPress}
>
<Text style={styles.texto}>Mantén presionado</Text>
</TouchableOpacity>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
boton: {
backgroundColor: '#4CAF50',
padding: 20,
borderRadius: 10,
},
texto: {
color: '#fff',
fontSize: 16,
},
});
export default EjemploLongPress; onLongPress: Detecta el evento cuando el usuario mantiene presionado el área del Pressable por más de 500 ms.handleLongPress: La función que se ejecuta cuando el evento es disparado (en este caso, muestra una alerta).delayLongPress: Puedes controlar cuánto tiempo debe transcurrir para que se active el evento onLongPress, con un valor en milisegundos.
Si deseas un tiempo más corto o más largo, puedes configurarlo así:<Pressable
onLongPress={handleLongPress}
delayLongPress={1000} // 1 segundo
style={{
padding: 10,
backgroundColor: 'skyblue',
borderRadius: 5,
}}>
<Text>¡Mantén presionado!</Text>
</Pressable> onLongPress es muy útil para proporcionar una interacción adicional o más compleja con los usuarios, más allá de un simple clic o toque.
Puedes usar ambos eventos en un mismo componente:
import React from 'react';
import { View, Text, Alert, TouchableOpacity, StyleSheet } from 'react-native';
const App = () => {
const handlePress = () => {
Alert.alert('Toque normal');
};
const handleLongPress = () => {
Alert.alert('Pulsación larga');
};
return (
<View style={styles.container}>
<TouchableOpacity
style={styles.button}
onPress={handlePress}
onLongPress={handleLongPress}
activeOpacity={0.7} // Ajusta la opacidad cuando el botón está presionado
>
<Text style={styles.buttonText}>Presióname</Text>
</TouchableOpacity>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#f5f5f5',
},
button: {
backgroundColor: '#3498db',
paddingVertical: 12,
paddingHorizontal: 20,
borderRadius: 8,
elevation: 3, // Agrega sombra para Android
shadowColor: '#000', // Agrega sombra para iOS
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.8,
shadowRadius: 3,
},
buttonText: {
color: 'white',
fontSize: 18,
fontWeight: 'bold',
textAlign: 'center',
},
});
export default App; Usamos View para contener el botón de TouchableOpacity.
El componente TouchableOpacity tiene las propiedades onPress y **onLongPress**, que muestran un Alert dependiendo de la interacción.
Botón interactivo que, al ser presionado, muestra una alerta de “Toque normal”, y al mantenerlo presionado, muestra una alerta de “Pulsación larga”.