RN开发搬砖经验之-Android平台下处理后退按钮事件

news2024/9/24 11:32:04

在这里插入图片描述

基本接口

利用RN 针对Android平台提供的接口 BackHandler

在这里插入图片描述
BackHandler需要区分类组件跟函数组件的场景,主要是两个组件一个基于组件生命周期的,一个是基于hook的,即注册BackHandler的事件监听与移除时机写法不同。

类组件

示例代码

import React, { Component } from 'react';  
import { BackHandler, Alert } from 'react-native';  
  
class MyComponent extends Component {  
  constructor(props) {  
    super(props);  
  
    // 订阅返回事件  
    this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);  
  }  
  
  componentWillUnmount() {  
    // 组件卸载时移除监听  
    this.backHandler.remove();  
  }  
  
  handleBackPress = () => {  
    // 自定义返回逻辑  
    // 例如:弹出确认框  
    Alert.alert(  
      '退出应用',  
      '确定要退出吗?',  
      [  
        {text: '取消', onPress: () => console.log('取消返回'), style: 'cancel'},  
        {text: '确定', onPress: () => BackHandler.exitApp()},  
      ],  
      { cancelable: false }  
    );  
  
    // 返回true表示阻止默认返回行为  
    return true;  
  }  
  
  render() {  
    // 渲染组件内容  
    return (  
      // ...组件内容  
    );  
  }  
}  
  
export default MyComponent;

函数式组件

import React, { useEffect } from 'react';  
import { BackHandler, Alert } from 'react-native';  
  
const MyComponent = () => {  
  useEffect(() => {  
    const backHandler = BackHandler.addEventListener('hardwareBackPress', handleBackPress);  
  
    return () => {  
      // 清除事件监听器  
      backHandler.remove();  
    };  
  }, []); // 注意,这里的依赖数组为空,意味着只在组件挂载和卸载时执行  
  
  const handleBackPress = () => {  
    // 自定义返回逻辑  
    Alert.alert(  
      '退出应用',  
      '确定要退出吗?',  
      [  
        {text: '取消', onPress: () => console.log('取消返回'), style: 'cancel'},  
        {text: '确定', onPress: () => BackHandler.exitApp()},  
      ],  
      { cancelable: false }  
    );  
  
    return true;  
  }  
  
  return (  
    // ...组件内容  
  );  
};  
  
export default MyComponent;

Hook

hook即针对于函数组件
我们需要引入 https://github.com/react-native-community/hooks#usebackhandler 库

yarn add @react-native-community/hooks

示例代码如下:

import {useBackHandler} from '@react-native-community/hooks'

useBackHandler(() => {
  if (shouldBeHandledHere) {
    // handle it
    return true
  }
  // let the default thing happen
  return false
})

Navigation

如果使用Navigation库的话,还有可以使用其提供的自定义后退按钮事件的处理 (也是针对函数式组件的)
https://reactnavigation.org/docs/custom-android-back-button-handling/
在这里插入图片描述

总结

结合函数式组件越来越流行的趋势,个人推荐使用 usebackhandler hook!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

24/03/05总结

easyx: #include "iostream" #include "easyx.h" #include "cstdio" using namespace std; int main() {initgraph(800, 600);setorigin(400, 300);setaspectratio(1, -1);//绘制多边形:polygon(const POINT *points,int num);//points 是一个P…

Python从0到100(二):Python语言介绍及第一个Pyhon程序

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

输出X^N对233333取模的结果。

对任意正整数N&#xff0c;求XN%233333的值。 要求运算的时间复杂度为O(logN)。 例如X30 X15*X15X15X7*X7*XX7X3*X3*XX3X*X*X共7次乘法运算完毕。输入输出格式 输入描述: 输入两个整数X和N&#xff0c;用空格隔开&#xff0c;其中X,N<10^9。 输出描述: 输出X^N对233333取模…

【排序】详解选择排序

一、思想 选择排序的原理与思想非常直观和简单&#xff0c;它通过不断地选择未排序部分的最小&#xff08;或最大&#xff09;元素&#xff0c;并将其放到已排序部分的末尾来实现排序。 具体来说&#xff0c;选择排序的过程可以分解为以下几个步骤&#xff1a; 寻找最小&…

Android m/mm/mmm/make编译模块

一.编译成模块的前置条件 Android编译环境初始化完成后&#xff0c;我们就可以用m/mm/mmm/make命令编译源代码了。lunch命令其实是定义在build/envsetup.sh文件中的函数lunch提供的。与lunch命令一样&#xff0c;m、mm和mmm命令也分别是由定义在build/envsetup.sh文件中的函数…

防火墙:网络防御的第一道防线

目录 引言 一、安全技术与防火墙 &#xff08;一&#xff09;安全技术 &#xff08;二&#xff09;防火墙的主要功能与分类 1.防火墙的主要功能 2.防火墙的分类 二、Linux防火墙的基本认识 &#xff08;一&#xff09;Netfilter &#xff08;二&#xff09;防火墙工具…

OSPF 完全stub区域实验简述

1、OSPF 完全stub区域配置 为解决末端区域维护过大LSDB带来的问题&#xff0c;通过配置stub no-summary 完全stub,仅支持1类、2类LSA&#xff0c;ABR产生1条3类默认路由。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 quit int e0/0/0 ip …

Java ElasticSearch面试题

Java ES-ElasticSearch面试题 前言1、ElasticSearch是什么&#xff1f;2. 说说你们公司ES的集群架构&#xff0c;索引数据大小&#xff0c;分片有多少 &#xff1f;3. ES的倒排索引是什么&#xff1f;4. ES是如何实现 master 选举的?5. 描述一下 ES索引文档的过程&#xff1a;…

Spring Bean装配精解:探索自动化与显式配置之道

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…

GEE入门篇|图像分类(一):监督分类

在遥感中&#xff0c;图像分类是尝试将图像中的所有像素分类为有限数量的标记土地覆盖和/或土地利用类别。 生成的分类图像是从原始图像导出的简化专题图&#xff08;图 1&#xff09;&#xff0c; 土地覆盖和土地利用信息对于许多环境和社会经济应用至关重要&#xff0c;包括自…

boss app sig及sp参数,魔改base64(下)

本章所有样本及资料均上传123云盘,需要复刻的自行下载. boss官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 boss app sig及sp参数,魔改base64(上)_app 魔改base64-CSDN博客 上篇boss分析sig的地址在上面了,把这个sp分析完后再把响应解密分析完就可以对boss的招聘数据…

雷卯推荐电磁兼容保护器件-MOV压敏电阻

一&#xff0e;雷卯MOV产品表格部分展示 一&#xff0e;雷卯MOV产品表格部分展示 三、MOV概述 MOV是金属氧化物压敏电阻器&#xff08;Metal Oxide Varistor&#xff09;的缩写。它是一种电子元器件&#xff0c;通常用于保护电路中的电子设备不受过电压的损害。当电路中电压超…

SwiftUI中的边框、圆角、阴影与渐变色的应用

在SwiftUI中&#xff0c;可以使用边框、圆角、阴影和渐变色来增强视图的外观和风格。 边框&#xff1a; 可以通过在视图上应用边框样式来创建边框效果。使用border()修饰符&#xff0c;并指定边框的颜色、线条宽度和圆角半径&#xff0c;例如&#xff1a; Text("Hello, …

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 2024)

【中国算力大会主办】2024算法、高性能计算与人工智能国际学术会议&#xff08;AHPCAI 2024&#xff09; 2024 International Conference on Algorithms, High Performance Computing and Artificial Intelligence 2024算法、高性能计算与人工智能国际学术会议&#xff08;AH…

【千字总结】爬虫学习指南-2024最新版

介绍 如何自学爬虫&#xff1f;今天有一个兄弟这样问我&#xff0c;可以看到打了很多字&#xff0c;诚意肯定是很足的&#xff0c;也是对我的内容给予了肯定&#xff0c;让我非常的开心。既然难得有人问我&#xff0c;那我一定要好好做一个回答。 我下面将要说的内容没有任何话…

Unity 刚体组件的碰撞与触发器

添加刚体组件 给球体添加刚体组件&#xff0c;将脚本挂载到上面。 以下效果为&#xff1a;当球体落到平面上会消失。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {void Start(){}void Update(){}// 开…

基于遗传优化的协同过滤推荐算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 最后得到推荐的商品ID号&#xff1a; 推荐商品的ID号&#xff1a;ans 9838175822191114902149021235224732230712349911790154716550165501655011…

游泳耳机品牌排行榜前十名:10大口碑产品力荐!

在现代快节奏的生活中&#xff0c;游泳已经成为许多人放松身心、保持健康的重要方式。而伴随着游泳&#xff0c;一款优秀的游泳耳机则成为了许多游泳爱好者不可或缺的装备之一。它不仅能让你在游泳时享受音乐、广播或是专注训练&#xff0c;还能让整个游泳过程更加愉悦、充满动…

宠物的异味,用空气净化器可以解决吗?宠物空气净化器品牌推荐

养猫的人都了解&#xff0c;一个养猫家庭的环境卫生和气味问题与主人的关系密切相关。主人的勤劳程度和对卫生的重视程度直接影响着家中的气味。尽管主人通常会经常更换猫砂&#xff0c;但有时候仍然会存在一些难闻的气味。事实上&#xff0c;忙碌的猫主人可能会因为没有足够的…

总结zy_不定长数据帧的收发

1、接收部分 身份证模块串口接收解析&#xff1a; #define CRC_16_CCITT 0x1021 unsigned short CRC16_CCITT(unsigned char* pchMsg, unsigned short wDataLen) // 1. MSB { unsigned char i, chChar; unsigned short wCRC 0; while (wDataLen–) { chChar *pchMsg; wCRC ^…