React Native WebView 应用程序在按后退按钮时不退出

2023-12-31

设置按下后退按钮后返回功能后,React Native WebView 应用程序不会在按后退按钮时退出。我希望当 webview 不在主页上时按后退按钮返回功能,当 webview 位于主页上时然后退出应用程序。

export default class WebView extends Component {

    constructor (props) {
        super(props);
        this.WEBVIEW_REF = React.createRef();
    }

    componentDidMount() {
        BackHandler.addEventListener('hardwareBackPress', this.handleBackButton);
    }

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

    handleBackButton = ()=>{
       this.WEBVIEW_REF.current.goBack();
       return true;
    }

    onNavigationStateChange(navState) {
      this.setState({
        canGoBack: navState.canGoBack
      });
    }


      render(){
        return (
          <WebView
            source={{ uri: 'https://stackoverflow.com' }}
            ref={this.WEBVIEW_REF}
            onNavigationStateChange={this.onNavigationStateChange.bind(this)}

          />
        );
      }
    }

由于您正在管理以下状态canGoBack inside onNavigationStateChange功能,改变你的handleBackButton函数如下,

handleBackButton = () => {
  if (this.state.canGoBack) {
    this.WEBVIEW_REF.current.goBack();
    return true;
  }
}

检查下面的完整示例

import React, { Component } from "react";
import { BackHandler } from "react-native";
import { WebView } from "react-native-webview";

export default class App extends Component {
  WEBVIEW_REF = React.createRef();

  state = {
    canGoBack: false,
  };

  componentDidMount() {
    BackHandler.addEventListener("hardwareBackPress", this.handleBackButton);
  }

  componentWillUnmount() {
    BackHandler.removeEventListener("hardwareBackPress", this.handleBackButton);
  }

  handleBackButton = () => {
    if (this.state.canGoBack) {
      this.WEBVIEW_REF.current.goBack();
      return true;
    }
  };

  onNavigationStateChange = (navState) => {
    this.setState({
      canGoBack: navState.canGoBack,
    });
  };

  render() {
    return (
      <WebView
        source={{ uri: "https://stackoverflow.com" }}
        ref={this.WEBVIEW_REF}
        onNavigationStateChange={this.onNavigationStateChange}
      />
    );
  }
}

希望这对您有帮助。如有疑问,请放心。

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

React Native WebView 应用程序在按后退按钮时不退出 的相关文章

  • 如何获取 React Native 组件类的字符串名称?

    我想要以字符串格式打印类名 以编程方式进行本机反应 谁能告诉我 我该怎么做 在 JavaScript 中 您可以使用以下方式获取类的名称instance constructor name class Demo extends React C
  • React Native / Laravel - 向 API 发送请求

    我正在实现一个移动应用程序 它使用 Laravel 作为 API 与数据库进行通信 我想将用户名和密码从我的 React Native 应用程序发送到 Laravel 我正在使用以下代码来执行此操作 fetch mysite com api
  • React Native FlatList 具有不同列数的替代行

    i want to have a FlatList which renders a single item on odd rows and 2 items on even rows 是否可以实现这种布局 抱歉 我还没有代码 FlatList
  • 如何为 HOC 创建共享状态?

    我创造了LoadBookHOC包裹着BookDetails and BookSummary成分 LoadBookHOC js const LoadBookHOC InnerComponent gt class LoadBook extend
  • AsyncStorage 未解析或拒绝

    我正在尝试从异步存储中获取项目 componentDidMount console log componentDidMount AsyncStorage getItem STORAGE KEY then storage gt console
  • React Native 的捆绑包是什么?它的用途是什么?

    我试图了解该捆绑包到底是什么以及它的目的是什么 我可以或不能用它做什么 我看到 当您运行命令 react native start 时 打包程序将被初始化 当您使用 react native run android 或 run ios 在设
  • 我应该使用 redux-form 存储而不是组件状态和 Redux 自定义存储吗?

    我相信任何应用程序都应该有一个事实来源 我的应用程序将有 90 多种交易表格和 150 份报告 复杂的数据结构 父级 子级 计算 所以在 React 中我发现了三个令人困惑的存储状态的地方 组件状态 当我们don t想要共享数据 Redux
  • react-native-firebase 无法处理通知 click_action 导航到通知屏幕

    我正在使用这个react native firebase和react navigation进行导航 我可以成功地从服务器或控制台推送通知 无论它是在前台还是后台 但我发誓文档不太清楚如何打开通知并导航到通知它所属的屏幕 这些是我的 onMe
  • React Native - “this.setState 不是一个函数”试图设置背景颜色动画?

    好吧 我只是想循环视图的背景颜色 在 3 4 种颜色之间渐变 我发现如何在 React Native 中对 ScrollView 的背景颜色进行动画处理 https stackoverflow com questions 50356933
  • 在 React 中存储数据

    我实际上是 React 新手 无法选择在这种情况下存储数据的最佳方式是什么 我有一个包含一些输入的表单 我需要在提交时对这些输入中的所有数据执行一些操作 所有输入都存储在一个组件中 所以 我只需要在提交时获取所有数据 现在我正在尝试选择存储
  • React Native:约束 Animated.Value

    我正在制作一个 React Native 应用程序 场景是这样的 我希望用户能够平移视图 但不完全按照他想要的方式 我想约束视图被拖动时可以移动的距离由用户 我已经阅读了两者的文档PanResponder and AnimatedAPI 多
  • jest快照测试:如何忽略jest测试结果中的部分快照文件

    问题 忽略 snap 文件测试结果的某些部分 这里的问题是 我的测试中有一些组件具有随机值 我并不真正关心测试它们 有什么办法可以忽略我的 X snap 文件的一部分吗 因此 当我将来运行测试时 它不会给我测试失败的结果 现在您还可以使用属
  • Socket.io 无法与 Android 上的 React Native 配合使用

    我最近正在学习 React Native 并且在使用 Socket IO 时遇到问题 我正在使用最新的 React Native 和 cli 刚刚更新 这是我的代码 import React Component from react imp
  • React-Native 中的导航抽屉

    我是反应原生的新手 不介意我问一个基本问题 我想知道 实现抽屉式导航的分步过程是什么 推荐链接这个链接 https github com react native community react native side menu usage
  • 我在 Facebook 上的“access_token”是“不正确的值”

    我正在使用 django rest auth 它是 Django all auth 的 API 扩展 我正在构建一个可以使用 Facebook 令牌注册 登录的移动应用程序 网址 http localhost 8000 rest auth
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • 为什么当我保存更改时,Expo 没有刷新?

    当我进行更改并保存它们时 模拟器中的应用程序不会刷新 我认为模拟器没有连接到 Metro 服务器 我尝试通过运行清除缓存expo r c 但这没有做任何事情 您是否尝试启用快速刷新 我遇到了同样的问题 但在启用 快速刷新 后 自动刷新再次开
  • 公式无效:/usr/local/Homebrew/Library/Taps/facebook/homebrew-fb/buck.rb

    我运行了brew 命令来安装Facebook homebrew tap 我有一个 M1 Apple Silicon 芯片组 并使用 Rosetta 下的终端来执行 brew 命令 brew tap facebook fb 我收到错误消息 g
  • 找不到 -lDoubleConversion 的库

    我尝试在 XCode 上构建 但是ld library not found for lDoubleConversion发生错误 我可以建造react native run ios 这可行 但 XCode 无法构建 ld 警告 找不到选项 L
  • 找不到导航对象。您的组件是否位于导航器屏幕内?

    在我下面的代码中 当我使用 useNavigation 时 它会给出像我的问题一样的错误 如何使用useNavigation 请任何人都可以解决此错误 错误 找不到导航对象 您的组件是否位于导航器屏幕内 我从这里跟踪了代码https rnf

随机推荐

  • 枚举网络共享

    net 框架是否有一部分可以枚举主机上的文件共享 我发现了一些使用 WMI 的东西 但我不想走那条路 您可以使用 NetShareEnum win32 api http www pinvoke net default aspx netapi
  • 在 TensorFlow 中修改恢复的 CNN 模型的权重和偏差

    我最近开始使用 TensorFlow TF 遇到了一个需要帮助的问题 基本上 我已经恢复了预先训练的模型 并且在重新测试其准确性之前 我需要修改其中一层的权重和偏差 现在 我的问题如下 我怎样才能使用改变权重和偏差assignTF 中的方法
  • 如何提供使用 fs.readFile 读取的文件

    我正在使用 Node js 开发一个应用程序 我必须读取服务器上的本地文件 我正在使用此功能 fs readFile path utf8 function err data 我如何向客户提供 数据 最好在新选项卡中打开它或在客户端上下载它
  • 如何仅在协程完成后才继续执行该功能?

    void Generate StartCoroutine FallDelayCoroutine print time3 Time time IEnumerator FallDelayCoroutine print time1 Time ti
  • 相当于 MySQL 中的 MSSQL IDENTITY 列

    MSSQL 相当于什么IDENTITYMySQL 中的列 我如何在 MySQL 中创建这个表 CREATE TABLE Lookups Gender GenderID INT IDENTITY 1 1 NOT NULL GenderName
  • 如何在 .send_keys() 中的字符之间进行延迟

    我正在自动化一个在线应用程序 并试图使每个 send keys 更加真实 而不是仅仅用 猛击文本字段 电子邮件受保护 cdn cgi l email protection 立即 我喜欢击键之间有一点延迟 这样看起来就像是人在打字 而不是机器
  • 将字符串转换为数组或对象

    是否可以将此字符串转换为数组或对象 它不是有效的 stringify JSON 数据 不知道如何解决这个问题 subject Test Comment message Test Message 预先感谢 像这样 JSON parse sub
  • 从输入框获取img src到div中

    我这个小项目背后的想法是让用户输入 img 的 URL 当用户点击按钮时 img 应该被插入到新的 div 页面内 我尝试在 stackoverflow 上寻找几个小时 但老实说 我不明白如何对我自己的代码使用其他答案 大部分 CSS 和
  • 值和引用类型

    我知道JavaScript中有6种数据类型 JavaScript 中的 引用 类型是什么 JavaScript 中的 值 数据类型是什么 有人可以按这两个类别列出它们吗 undefined null number string boolea
  • PHP 扩展未通过 httpd 找到,但可以从 CLI 找到,具有相同的 php.ini

    我想在安装 PHP 7 1 和 Apache 2 4 后在我的 Windows 7 上使用它的一些扩展 我编写了一个小测试脚本index php调用给定扩展的某些功能
  • .htaccess php 重写

    我在将 authentication view profile user username 重写为 myurl com profil username 时遇到问题 现在我的 htaccess 文件是 RewriteEngine On Rew
  • Outlook VBA Mailitem 属性 SenderEmailAddress 未正确返回地址

    因此 我在 access 中有一个程序 可以让用户选择要导入到表中的 Outlook 文件夹 然后可以从组合框中选择并传输到表单以供使用 但是 我对返回的值之一有疑问 SenderEmailAddress 实际上并没有给我一个电子邮件地址
  • Android 11 (R) 查询 ACTION_IMAGE_CAPTURE 意图时返回空列表

    设备 模拟器 Pixel 3a Android 11 Code final List
  • AFNetworking - 如何为一个键指定多个值

    我正在尝试使用 AFHTTPClient 方法 postPath 将一个参数键的多个值传递给 HTTP 请求 但是 参数变量是 NSDictionary 因此我无法为我的键 email 设置多个值 我尝试将电子邮件值作为逗号分隔的字符串发送
  • 如何从 PDF 文件中提取页面? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 Perl 脚本可以从 PDF 文件获取页面并将其转换为另一个 PDF 文件 您要求 Perl 所以这是一个很好的解决方案CAM
  • 什么时候您更愿意声明异常而不是在 Java 中处理异常?

    我知道如果我们希望调用方法处理该异常 则可以为该方法声明异常 如果封闭方法抛出 IOException 这甚至允许我们执行诸如写入 OutputStream 之类的操作 而无需将代码包装在 try catch 块中 我的问题是 任何人都可以
  • 删除样式标签上的样式属性

    我有一个STRING with html内容 我想删除style属性上style使用 javascript 正则表达式标记 如下所示 before
  • YQL 天气结果一半时间为空

    雅虎数据有时无法获取数据 query results is null or not an object 我在 Chrome 55 0 2883 87 和 fierfox 50 1 0 上发生了这种情况 这是我正在使用的 YQL 以及回应 q
  • MongoDB:地理空间索引数组的格式不正确

    在尝试设置使用 MongoDB 上的地理空间索引时 我遇到了错误消息 指出位置数组的格式不正确 这是我的收藏 测试 id ObjectId 4f037ac176d6fdab5b00000a CorporateId XYZ12345 Plac
  • React Native WebView 应用程序在按后退按钮时不退出

    设置按下后退按钮后返回功能后 React Native WebView 应用程序不会在按后退按钮时退出 我希望当 webview 不在主页上时按后退按钮返回功能 当 webview 位于主页上时然后退出应用程序 export default