Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

250
Vistas
Usando ganchos de reacción, ¿cómo escribiría un detector de eventos dependiente del estado que no necesita agregarse y eliminarse cada vez que cambia el estado?

El siguiente código muestra una implementación funcional, pero ineficiente, de un BackHandler de Android dentro de React Native para que la aplicación salga después de dos pulsaciones en dos segundos. Esto se implementa utilizando ganchos React dentro del componente funcional principal de la aplicación.

Sin embargo, debido a la dependencia de una variable de estado recentlyPressedHardwareBack , el useEffect se limpiará y luego se ejecutará cada vez que cambie el estado, lo que hará que el detector de eventos BackHandler se desconecte y se vuelva a conectar cada vez que se presione el botón Atrás. ¿Cómo configura este detector de eventos solo una vez sin creación y eliminación constantes, mientras le permite acceder a un estado de componente cambiante?

 const [recentlyPressedHardwareBack, setRecentlyPressedHardwareBack] = useState(false); useEffect(() => { const backHandler = BackHandler.addEventListener( 'hardwareBackPress', () => { // Exit app if user pressed the button within last 2 seconds. if (recentlyPressedHardwareBack) { return false; } ToastAndroid.show( 'Press back again to exit the app', ToastAndroid.SHORT, ); setRecentlyPressedHardwareBack(true); // Toast shows for approx 2 seconds, so this is the valid period for exiting the app. setTimeout(() => { setRecentlyPressedHardwareBack(false); }, 2000); // Don't exit yet. return true; }, ); return () => backHandler.remove(); }, [recentlyPressedHardwareBack]);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Podrías usar useRef para esto.

 const recentlyPressedHardwareBackRef = useRef(false); useEffect(() => { const backHandler = BackHandler.addEventListener( 'hardwareBackPress', () => { // Exit app if user pressed the button within last 2 seconds. if (recentlyPressedHardwareBackRef.current) { return false; } ToastAndroid.show( 'Press back again to exit the app', ToastAndroid.SHORT, ); recentlyPressedHardwareBackRef.current = true; // Toast shows for approx 2 seconds, so this is the valid period for exiting the app. setTimeout(() => { recentlyPressedHardwareBackRef.current = false; }, 2000); // Don't exit yet. return true; }, ); return () => backHandler.remove(); }, [])
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda