是navigation.goBack(); navigation.navigate(...);有效?

时间:2018-11-17 17:22:02

标签: react-native react-navigation

从堆栈中消除屏幕的推荐方法是什么?在某些情况下,用户在一个屏幕上提交信息(创建帐户或进行交易等),并且我希望删除输入屏幕,以便将他们路由到结果屏幕并返回在输入信息之前将其显示到屏幕上。

理想的流程应类似于物料屏幕->购买屏幕->结果屏幕-(goBack)->物料屏幕,以防止混乱或重复提交收集的信息。

我目前正在做的是navigation.goBack(); navigation.navigate('ResultScreen');,但是我收到有关在未安装的组件上设置状态的警告(消息表明这是内存泄漏)。我在该路径上的代码中没有看到任何明显的setState调用,因此我在想Navigation.navigate()正在做一个setState / forceUpdate(forceRender吗?)。不按预期方式进行操作。

在docs / stackoverflow / github问题中进行搜索并没有取得很好的指导。有什么建议么?

谢谢!

1 个答案:

答案 0 :(得分:0)

实现这一目标的最佳方法是使用Reset action。这样就不会过度污染堆栈。

import { StackActions, NavigationActions } from 'react-navigation';

const resetAction = StackActions.reset({
  index: 0,
  actions: [
    NavigationActions.navigate({ routeName: 'ItemScreen' })
  ],
});
this.props.navigation.dispatch(resetAction);

通过这种方式,您可以重置堆栈并消除有人重新浏览各个项目的可能性。