【问题标题】:React-Native Stack navigator go back to previous screen with same initialRouteNameReact-Native Stack navigator 使用相同的 initialRouteName 返回上一个屏幕
【发布时间】:2021-01-01 16:31:49
【问题描述】:

我正在开发一个 React Native 应用程序并正在使用反应导航的 stacknavigator,这是我的场景:

  • 我有一个组件 A 作为堆栈导航器,其中包含屏幕 B(和其他)。
  • 单击 A 中的按钮导航到 B
  • 单击 B 中的按钮导航到 B(这次使用新数据)
  • 点击第二个 B 的默认后退按钮导航到 A。这是我的问题,因为我想回到第一个 B 检查我的 stacknavigator 配置,如果我错过了额外的配置,请纠正我,谢谢。
<AppStack.Navigator
    initialRouteName="HOME"
    screenOptions={stackStyle}>
    <AppStack.Screen
        name="HOME"
        component={A}
    />
    <AppStack.Screen
        name="B"
        component={B}
    />
....

B内:

const {navigation} = this.props;
navigation.navigate('B', {new data for second B});

编辑:忘了提到第一个 B 从 webview 触发第二个 B

【问题讨论】:

  • 当你点击按钮 B 时,我能看到你在做什么吗?你是否尝试从 B 屏幕执行类似 navigation.navigate('B') 的操作?
  • 完全是@HichamELBSI
  • 在我看来,你不应该这样做。您应该使用状态更新或仅使用此屏幕所需的组件重新渲染屏幕。
  • 好的,从同一个屏幕调用的问题类型是什么?不做是个好习惯?
  • navigation.replace('screenA')

标签: react-native react-navigation


【解决方案1】:

在我看来,您应该处理要重新渲染的组件的状态。无论如何,如果您只需要导航到同一页面并保持返回,您可以替换:

navigation.navigate('B', { ... })

作者:

navigation.push('B', { ... })

当您使用push 时,您会创建一条新路线,因此当您从这条新路线返回时,它将导航到上一条路线。 navigate 将尝试转到现有路线,因此在您的情况下:路线 B ​​实际上已经存在。

【讨论】:

  • 说得有道理,会试一试,然后回复你。顺便说一句,仍然对“你不应该这样做”感到困惑。因为在我的用例中,如果我更改了状态,则 Web 视图的内容将会更改,但用户无法返回到 Web 视图的第一个内容。你明白我的意思了吗?
  • TBH 这取决于您的用例。例如,如果您想在用户配置文件之间或两个详细信息页面之间导航,从 B 导航到 B 可能会很有用。但我说的是一个经典的用例,你从一个空的 B 页面导航到一个填充的数据 B 页面。
  • 谢谢,我可以提供一个结合两者(状态和推送)的解决方案。我再次提到了一个特殊用例,我应该在同一个 B 屏幕中更新 webview 内容。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多