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

在这里插入图片描述

基本接口

利用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!

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值