在反应导航中删除堆栈

时间:2018-01-17 16:21:08

标签: react-native react-navigation

假设我们有这个屏幕导航案例:

其他先前的屏幕 - > A - > B - > C - > d

现在我们在屏幕D中,我们如何直接返回屏幕B并从堆栈中删除屏幕D和C?

我正在使用navigation.navigate(B,params),但是当我点击后退按钮时,我在屏幕B中返回到屏幕D.目的是转到A.

编辑: 我正在尝试使用重置操作:

const resetAction = NavigationActions.reset({
  index: 0,
  actions: [previousNavigationActions, navigateActionToScreenB],
});
this.props.navigation.dispatch(resetAction);

如何从导航状态获取以前的导航操作?

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

import { NavigationActions } from 'react-navigation'

const backAction = NavigationActions.back({
    key: 'C'   // if you want to go back to B
})

this.props.navigation.dispatch(backAction)

作为key,您必须在要导航到的屏幕后使用该屏幕,请参阅React Navigation Docs

您也可以尝试手动reset历史记录,但上面的反向方法将是更简单,更清晰的解决方案。

答案 1 :(得分:0)

react-navigation插件3.9.0版开始,我使用了以下代码,该代码删除了所有的后退堆栈并导航至屏幕。

 this.props.navigation.dispatch(
  StackActions.reset({
  index: 0,
  key: null,
  actions: [NavigationActions.navigate({ routeName: '<<YOUR ROUTE NAME>>' })]
  })
  )