React Navigation V5 有没有办法链接导航?

2024-01-08

假设我有屏幕 A、B、C。是否可以在屏幕 A 中编写代码从 A 导航到 B,然后立即导航到 C?


use dispatch https://reactnavigation.org/docs/navigation-prop/#dispatch with 自定义动作创建者 https://reactnavigation.org/docs/navigation-prop/#custom-action-creators

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

 const goToC = () => {
    navigation.dispatch((state) => {
      //update navigation state as you want.
      const routes = [
        //current state
        ...state.routes, 
        //add 2 new route to state.
        { name: 'b', params: {id : 100} }, //you can also add params 
        {name: 'c' }
      ];

      return CommonActions.reset({
        ...state,
        routes,
        index: routes.length - 1,
      });
    });
  }

完整代码尝试零食here https://snack.expo.dev/@ahmed_gaber/navigation-dispatch.

import * as React from 'react';
import { Button, View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { CommonActions } from '@react-navigation/native';

const containerStyle = { flex: 1, alignItems: 'center', justifyContent: 'center' };

function ScreenA({ navigation }) {


  const goToC = () => {
    navigation.dispatch((state) => {
      const routes = [
        ...state.routes, 
        { name: 'b', params: {id : 100} },
        {name: 'c' }
      ];

      return CommonActions.reset({
        ...state,
        routes,
        index: routes.length - 1,
      });
    });
  }


  return (
    <View style={containerStyle}>
      <Text>ScreenA</Text>
      <Button 
        onPress={goToC}
        title="Go to C"
      />
    </View>
  );
}


function ScreenB({ navigation, route }) {
  return  (
    <View style={containerStyle}>
        <Text>{JSON.stringify(route.params)}</Text>
        <Text>ScreenB</Text>
    </View>
  )
}


function ScreenC({ navigation }) {
  return  <View style={containerStyle}><Text>ScreenC</Text></View>
}


const Stack = createStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="a" component={ScreenA} />
        <Stack.Screen name="b" component={ScreenB} />
        <Stack.Screen name="c" component={ScreenC} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

export default App;

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

React Navigation V5 有没有办法链接导航? 的相关文章

随机推荐

  • 无需预处理器即可扩展 C/C++ 函数宏

    如何在 C C 文件中测试 扩展所有函数宏 而不通过预处理器运行它 例如 是否有一个程序或方法可以改变这一点 include
  • PHP服务器ERR_CONNECTION_REFUSED

    我无法让 php 服务器在我的本地计算机上运行 我尝试使用 wampserver 和 Easy PHP 我检查了我的使用情况port 80 我更改了端口 80 to 8080 我给了 Apache 和 mysql 防火墙设置所需的权限 我做
  • 在 WPF 中将窗口的 DataContext 绑定到窗口本身

    我有一个继承自 Window 的简单对话框窗口 我在 XAML 中设置它的 DataContext 如下所示
  • 从 efi 应用程序发送 TCP 或 UDP 数据包

    我想开发一个在 EFI shell 中从startup nsh 自动执行的应用程序 此应用程序应将原始字节发送到 IP 地址并接收一些返回的字节 我到处寻找在我的代码中实现简单网络协议的解释和示例 但一无所获 有人可以解释并显示使用 gnu
  • C# 构造函数执行顺序

    在 C 中 当你这样做时 Class Type param1 Type param2 base param1 是先执行类的构造函数 然后调用超类构造函数 还是先调用基类构造函数 顺序是 层次结构中所有类的成员变量都初始化为默认值 然后从最派
  • 如何在 Swift 中将 base64String 转换为 String? [复制]

    这个问题在这里已经有答案了 我从 NSData 中的 Web 服务响应接收到一个 base64 字符串 如何在 swift 中将 dat base64 字符串转换为字符串 Code var jsonResult NSJSONSerializ
  • 使用外部数据扩展 Keycloak 中的用户访问令牌

    我们使用 Keycloak 服务作为 SSO 解决方案 并将生成的 JWT 提供给不同的微服务 效果非常好 但现在我们遇到的问题是 当用户尝试登录时 JWT 必须使用来自外部资源的数据进行扩展 更具体地说 一个用户可以通过一个唯一的ID作为
  • 如何使用Wix安装.NET Framework的可再发行包?

    我有一个一般任务 在产品设置过程中安装 NET Framework 3 5 我执行以下操作 我创建了一个自定义操作 X 自定义操作 X 通过 Process Start 启动可执行文件 Y 可执行文件 Y 终止 msiexec 进程并运行
  • LPHANDLE 与 HANDLE

    在浏览一些代码时 我发现了一个调用打开打印机 http msdn microsoft com en us library dd162751 aspx 该代码可以编译并且运行良好 但是 我们正在通过一个HANDLE代替LPHANDLE 如 M
  • 正则表达式匹配 ini 值

    我正在尝试匹配 ini 行值的姓氏 foo bar far boo some value 我可以匹配 boo 但我只需要 boo I do w s 但它匹配等号 但我不希望它匹配 顺便说一句 如果没有像这样的子值 我应该能够得到 foo v
  • 使用子模块创建公共存储库

    我想创建一个包含多个子模块的公共存储库 裸存储库 我希望不同的人克隆这个裸存储库 在任何子模块中进行更改 更新公共存储库 然而 我意识到这是相当痛苦的 我希望我的存储库如下所示 我有四个独立的存储库 a kernel b rootfs c
  • 无法在 XML 文件上 insertBefore

    我正在尝试编写一个脚本来更新 RSS XML 文件 我希望它获取现有文件并将新项目添加到项目列表的顶部 我之前已经将其添加到文件末尾 但现在它根本没有添加新项目 我已经在网上检查过 但仍然无法使其工作 这是我到目前为止所拥有的 rssDoc
  • python 模块存储在哪里?

    我最近开始学习Python 有两个与模块相关的问题 有没有办法获取机器上可用 即安装 的Python模块列表 我使用 Ubuntu Karmic 和 Synaptic 进行包管理 我刚刚安装了一个 python 模块 模块代码实际存储在我的
  • 能让代码分析理解代码契约吗?

    当组合使用代码分析和代码契约时 我收到很多警告 例如 CA1062 http msdn microsoft com en us library ms182182 aspx Microsoft Design 在外部可见的方法 Foo Bar
  • ggmap,使用 coord_cartesian 将所有点推向北方

    正如标题所说 当我添加时coord cartesian到我的 ggmap 它将我所有的点都向上移动 这是一些数据 pricedata lt structure list nodename c CIN WABRIVR 2 CIN WHEATC
  • Julia v0.6 函数内部宏

    有人可以解决我遇到的这个宏错误吗 它只在版本 0 6 中开始发生 mutable struct Foo x Int end macro test myfoo quoteblock quote myfoo x 1 end return quo
  • 如何从另一个数据框中获取值的行列名称

    给定一个范围表 start end name blue green yellow purple a 1 5 654 678 11 15 b 88761 88776 c 1211 1215 38 47 d 89 95 1567 1578 和一
  • 处理 twitter chill 中的案例类(Scala 到 Kryo 的接口)?

    Twitter chill 看起来是一个很好的解决方案 可以解决如何在 Scala 中高效序列化而不需要过多的样板文件的问题 但是 我没有看到任何证据表明他们如何处理案例类别 这是自动工作还是需要做一些事情 例如创建一个零参数构造函数 我有
  • 尝试调用不存在的方法, mongo-java-driver , mongobee

    我正在使用 MongoBee 进行迁移 但出现异常mongoTemplate insertAll 机场 ChangeLog order 001 public class DbChangeLog001 ChangeSet order 001
  • React Navigation V5 有没有办法链接导航?

    假设我有屏幕 A B C 是否可以在屏幕 A 中编写代码从 A 导航到 B 然后立即导航到 C use dispatch https reactnavigation org docs navigation prop dispatch wit