React Native - 设备后退按钮处理

2024-02-26

我想检查当按下设备后退按钮时是否有多个屏幕在堆栈上。如果是,我想显示上一个屏幕,如果否,我想退出应用程序。

我已经检查了一些例子,但那些使用BackAndroid and Navigator。但它们都已被弃用。BackHandler是替代BackAndroid。我可以使用显示上一个屏幕props.navigation.goBack(null).

但我无法找到用于在堆栈中查找屏幕计数的代码。我不想使用已弃用的Navigator!


此示例将向您展示大多数流程中通常预期的后退导航。您必须根据预期行为将以下代码添加到每个屏幕。有2种情况: 1. 如果堆栈上有超过 1 个屏幕,设备后退按钮将显示上一个屏幕。 2. 如果堆栈上只有 1 个屏幕,设备后退按钮将退出应用程序。

情况 1:显示上一屏幕

import { BackHandler } from 'react-native';

constructor(props) {
    super(props)
    this.handleBackButtonClick = this.handleBackButtonClick.bind(this);
}

componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick);
}

componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
}

handleBackButtonClick() {
    this.props.navigation.goBack(null);
    return true;
}

重要的:不要忘记在构造函数中绑定方法并在 componentWillUnmount 中删除侦听器。

案例2:退出应用程序

在这种情况下,无需在要退出应用程序的屏幕上处理任何内容。

重要的:这应该是堆栈上的唯一屏幕。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native - 设备后退按钮处理 的相关文章

随机推荐

  • C# 中的双按位非 (~~)

    我一直在读ThreadLocal
  • 我可以在 DDD 中拥有“不完整”的聚合吗?

    DDD 规定您只能通过实体的聚合根来访问实体 举例来说 你有一个聚合根 X 它可能有一个lot子 Y 实体的数量 现在 对于某些场景 您一次只真正关心这些 Y 实体的子集 也许您将它们显示在分页列表或其他内容中 那么是否可以实现一个存储库
  • 如何修复 oh-my-zsh 插件无法工作的问题

    我刚刚发现了 oh my zsh 但我无法让它工作 虽然主题可以完美地工作 但插件却不能 我选择了一些插件 例如 macports 但我既没有完成端口命令 也没有适当的别名工作 这是我的 zshrc Path to your oh my z
  • 使用 React 在 Material UI 对话框中形成表单

    我正在尝试让一个表单在 Material UI Dialog 组件中工作 如果我将对话框包装在表单标签中 它们甚至不会出现在生成的 html 中 还不知道为什么
  • 有 HTML5 注册机示例吗?

    我很难理解如何使用
  • 比较 Struts2 标签中的字符串

    我有一个index jsp页面 其中某些元素根据用户是否登录而打开 关闭
  • Laravel MIME 验证

    我遇到了一个麻烦 关于使用 Laravel 验证 JavaScript 文件的上传 其中验证规则是 javascript file gt required mimes js 据我所知 这应该有效 因为 Laravel 使用mime cont
  • 在 Android 中将应用程序上下文放入静态方法的最佳方法

    我正在开发一个具有多个活动的 Android 应用程序 其中我有一个带有几个静态方法的类 我希望能够从不同的活动中调用这些方法 我使用静态方法通过 XmlResourceParser 从 xml 文件加载数据 要创建 XmlResource
  • Coinbase Python API 上的分页

    我正在尝试获取 Coinbase 帐户上的所有交易 这需要分页 这文档 https developers coinbase com api v2 javascript pagination关于如何在 Python 中执行此操作的信息很少 但
  • 如何使用 Selenium 和 C# 删除元素属性?

    下面是我想要从中删除 disabled disabled 并关闭开发工具窗口的html块 我正在使用 selenium webdriver 和 c 谢谢 a class btn btn success href Click to Submi
  • 集合是确定性的吗? [复制]

    这个问题在这里已经有答案了 当阅读诸如此类的问题时从 python 中的列表中获取唯一值 https stackoverflow com questions 12897374 get unique values from a list in
  • Process的Exited事件没有发生?

    在我的应用程序中 我打开一个 Excel 工作表以向用户显示我的 Excel 文档之一 但在显示 Excel 之前 我将其保存到本地计算机中的一个文件夹中 该文件夹实际上将用于显示 当用户关闭应用程序时 我希望关闭打开的 Excel 文件并
  • 如何用 Unicode 表示上标斜杠?

    有什么办法可以用 Unicode 写上标斜杠吗 我的目标是以比123 456 789 那么 unicode 充满了字符 其含义取决于其解释 对于上标斜杠 您可以使用 加拿大音节最终急性 https unicode table com en
  • JavaScript 和继承

    说我有一个Class function Foo this foo1 null this foo2 function return false 我希望其他对象继承它的变量和函数 function Bar function Baz 然后实例化我
  • 获取 html 后使用 MailApp 发送表单。将 Google 表单嵌入到电子邮件中。生成的电子邮件仅包含文本

    我想在电子邮件中嵌入 Google 表单并使用 MailApp 发送 我正在尝试使用以下位置的代码 https stackoverflow com a 23671529 4305236 https stackoverflow com a 2
  • Sql 查询仅返回第一行

    我尝试显示选择查询的结果 但我只得到重复的第一行而不是所有行 这是我的代码 query SELECT Email from client result db gt query query gt fetch foreach result as
  • Spring 利用 Mongo 通过 JPA 实现

    我对 Spring 框架相当陌生 并且在设置我当前正在处理的项目时遇到了一些问题 我需要能够连接到两个不同的数据库 一个是 MongoDB 另一个是 MSSQL 我正在使用 JPA 连接到 MSSQL 我遇到的问题是 当我希望它调用 MSS
  • 是否可以从 ASP.NET 4.0 中的服务器错误页面中删除信息?

    为了更好地向用户隐藏信息 我正在尝试删除版本信息标准 ASP NET 错误屏幕中的部分 自定义错误已启用 但是在某些情况下 如果您设法遇到超出您控制范围的错误 也许是服务器问题 那么您可以联系 YSOD 我尝试更改 web config 以
  • 列表包中 R 代码块的颜色

    我希望在 LaTeX 文档中插入 R 代码块 默认设置为listings包还改变了字体 但没有改变我需要的颜色 虽然我知道我可以使用lstset功能 我不太确定组合起来会好看 因此 任何人都可以分享他们的lstset设置为listings封
  • React Native - 设备后退按钮处理

    我想检查当按下设备后退按钮时是否有多个屏幕在堆栈上 如果是 我想显示上一个屏幕 如果否 我想退出应用程序 我已经检查了一些例子 但那些使用BackAndroid and Navigator 但它们都已被弃用 BackHandler是替代Ba