如何使用 React Navigation v5 保留带有嵌套导航的初始路线?

2023-12-02

首先让我声明我知道如何使用反应导航从一个嵌套页面导航到另一个嵌套页面。但是,每当我导航到不是初始路线的嵌套屏幕时,每当我导航回该嵌套堆栈时,该屏幕就会成为第一个屏幕。

Example.

  • Parent Navigator
    • Nested Stack Navigator 1
      • 屏幕A(初始路线)
      • screen B
    • Nested Stack Navigator 2
      • 屏幕 C(初始路线)
      • screen D
    • Nested Stack Navigator 2
      • 屏幕 E(初始路线)
      • screen F

通常,当从一个堆栈导航到Nested Stack Navigator 2我使用以下内容。

navigation.navigate('Nested Navigator 2');

这带我去screen C,这是预期的行为。但是,每当我从另一个堆栈导航到screen D,我注意到每当我导航回Nested Stack Navigator 2使用上面的代码,它不再打开screen C它打开了screen D反而。

这就是我导航到的方式screen D来自另一个堆栈。

navigation.navigate('Nested Navigator 2', { screen: 'screen D', initial: false });

每当使用这个screen D充当初始路线,尽管我指定了事件initial: false在导航通话中。有办法防止这种情况吗?


一旦您导航到嵌套堆栈导航的初始路由组件以外的另一个组件,navigation.navigate('Nested Navigator 2');不管用

初始导航堆栈将在初始路线上显示此内容

[
 { name: ScreenA },
 { name: ScreenC },
 { name: ScreenE }
]

但是每当您从屏幕 C 导航到屏幕 D 时,屏幕 D 的路由都不会插入到堆栈的末尾,因为它是嵌套导航两个

[
 { name: ScreenA },
 { 
   name: NestedNavigator,
   [
    { name: screenC }, 
    { name: screenD }
   ]
 },
 { name: ScreenE }
]

所以你需要使用, navigation.navigate('嵌套导航器 2', { screen: 'screen D' }); 这是因为当您导航到初始路线以外的屏幕时,堆栈会发生变化,

您将需要在嵌套组件上重置路由,即每当您导航到屏幕 D 时,使用 commonActions 重置路由堆栈,设置屏幕,这将更新堆栈,并从堆栈中删除屏幕 D。

import { CommonActions } from '@react-navigation/native';

componentDidMount() {
   this.props.navigation.addListener('blur', () => {
            this.props.navigation.dispatch(
                CommonActions.reset({
                  index: 1,
                  routes: [
                    { name: 'ScreenC' },
                    
                  ],
                })
              );
        });
    }

如果您只想删除某个路线而不是重置整个导航

 this.props.navigation.dispatch(state => {
            // Remove the route from the stack
            const routes = state.routes.filter((r => r.name !== 'ScreenC' ));
        
            return CommonActions.reset({
              ...state,
              routes,
              index: routes.length - 1,
            });
          });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 React Navigation v5 保留带有嵌套导航的初始路线? 的相关文章

随机推荐

  • CMake 生成 makefile 的速度很慢

    当我运行 CMake 来构建忒伊亚图书馆使用 CMake 生成 makefile 非常慢 轻松需要 1 2 分钟 该项目本身有很多源文件 但我想知道是否有一种方法可以加快 makefile 的生成速度 有任何想法吗 None
  • 如何在没有控制台/本机应用程序交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory (AAD) 身份验证令牌?

    如何在没有控制台 本机应用程序交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory AAD 身份验证令牌 细节 我正在使用 Graph API 通过具有 委派 权限的 Azure Active D
  • R 中两个日期之间的总和/计数

    我有一个包含两列的数据框 一列是开始日期 另一列是结束日期 我需要获取一个包含两列的新数据框 一个是 日期 列 另一列是第一个数据框中的观察值计数 其中日期位于 开始 和 结束 之间 Have dates lt data frame Sta
  • Kendo ui 选择器 CSS 问题

    我正在使用 kendo ui 下拉列表和其他一些选择器 我想设置所选项目背景颜色的样式 我尝试过 k dropdown k state selected background color red 但所选项目的颜色没有改变 它仅设置为默认橙色
  • 使用 Application Insights 检测 Windows 服务

    是否可以使用 Application Insights 检测本地运行的 Windows 服务 没有必要像 Web 应用程序那样自动收集应用程序的指标 将自定义事件推送到 Azure 就足够了 我会让文档对此更加清楚 如果有一个核心 SDK
  • 我如何在android中设置自定义日期

    如何将日期设置为当年 25 12 12 月 例如 我正在使用这个代码 public static Calendar defaultCalendar Calendar currentDate Calendar getInstance curr
  • 以编程方式声明任意等级的数组

    在 C 中 数组分为三种类型 一维数组 锯齿形数组和多维矩形数组 问题是 给定一个特定大小的数组 我们如何创建一个具有相同维度和秩的新数组 对于多维矩形数组 似乎没有语法可以在运行时定义大小和等级 维数 C 在索引器中声明带有逗号的多维数组
  • 合并两个数组,同时保留原始数组顺序

    我正在编写一个从外部源 Twitter 请求数据的应用程序 该数据按时间顺序作为有序数组返回 外部阵列 项目 A 最新 Item B Item C 项目 D 最旧的 我将这些项目添加到另一个保留相同顺序的数组中 My array 项目 A
  • Thread.Abort 和替代方案

    这更多是出于个人好奇 兴趣 而不是我试图解决的特定问题 假设您有一个程序正在对用户提供的信息 例如搜索字符串 执行某些操作 这些信息会随着用户键入而更改 假设您想要向用户显示与他们在任何给定时间键入的内容最相关的信息 如果线程确实可以中止
  • PHP 中内爆二维数组

    我有一个像这样的数组 Array 0 gt Array 0 gt a 1 gt b 1 gt Array 0 gt c 2 gt Array 0 gt d 1 gt e 2 gt f 我想将数组转换为如下所示的字符串 arrtostr a
  • Spring Boot 项目设置设计决策

    我们将使用 Spring Boot 来创建服务 我们最初的想法是每个服务 不一定是微服务 都是独立的 并部署为 jar 文件 用于构建的 Maven 我想知道什么是一个好的 Spring Boot 项目结构 因为每个服务都是独立的 但我猜测
  • MS Exchange 服务器的 Grails 邮件插件配置

    我可以使用我的 gmail 帐户从我的 grails 应用程序发送电子邮件 但是当我使用 MS Exchange 服务器帐户时 我收到此错误 Message Mail server connection failed nested exce
  • 如果再次调用函数,则取消超时/计时器 --- debounce 函数

    我想创建一个启动超时的函数 但如果在计时器结束之前再次调用该函数 请取消原始调用并再次启动计时器 我想我可以这样做 function setTimer setTimeout gt do something 3000 但这不起作用 每次我运行
  • Ruby Regex 用于捕获两个字符串之间的所有内容(包括)

    我正在尝试清理一些 HTML 并仅删除一个标签 我真的很想避免使用 nokogiri 等 所以我出现了以下字符串 我想删除它 div class lt div gt m这有效 但它也会匹配并包括任何进一步的 div 文档中的标签 这是我不想
  • PySpark:如何转置数据框中的多列

    我是 Spark 新手 需要帮助将以下输入数据帧转换为所需的输出df 行到列 使用 PySpark 或 Spark Sql 输入数据框 A B C D 1 2 3 4 10 11 12 13 所需的输出 转置 数据 A 1 B 2 C 3
  • 为什么我看到的线程数比我在“ps”列表中创建的线程数多了一个?

    当我创建一个线程时 pthread create 从我的主进程中 我看到三 3 个线程ps上市了 这是为什么呢 也就是说 我看到主线程的进程 一个用于创建的线程 第三个用于其他线程 还有什么东西 一切工作正常 我只是想知道额外列出的过程是什
  • 使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快吗?

    我只知道使用 cin 和 cout 会比 scanf 和 printf 慢 然而 最佳答案说使用 std ios sync with stdio false 可以比 scanf printf 更快 然而我做了这个实验 发现不对 是我的错吗
  • 在最后一个窗口上调用 dispose 后,java swing 程序未关闭

    前言 这是我做的第一个真正的挥杆项目 我有一个 swing 程序 其中一个 JButton 应该退出该程序 该按钮会触发 this dispose 当我点击这个 JButton 时 它does使窗口完全消失 但查看调试器 程序本身仍在运行
  • 从 git status bash 输出创建字符串数组

    我正在尝试创建修改后的 git 文件的字符串数组 以便我可以在 bash 程序中使用它们 示例输出 On branch restructured Your branch is up to date with origin restructu
  • 如何使用 React Navigation v5 保留带有嵌套导航的初始路线?

    首先让我声明我知道如何使用反应导航从一个嵌套页面导航到另一个嵌套页面 但是 每当我导航到不是初始路线的嵌套屏幕时 每当我导航回该嵌套堆栈时 该屏幕就会成为第一个屏幕 Example Parent Navigator Nested Stack