重置导航而不进行重做

时间:2018-09-10 10:00:20

标签: react-native react-navigation

据我所知,reset中的react-navigation是通过调度NavigationActions.reset();的redux操作完成的

控制台日志记录this.props.navigation显示了一个重置​​功能,但是如果我尝试将其用作this.props.navigation.reset('Home'),则会抛出错误newStackActions.map不是一个函数。

我们可以不使用redux重置整个导航吗?应该有这样的功能,我想我找不到它:/

2 个答案:

答案 0 :(得分:1)

您可以使用StackActions重设特定的堆栈,并使用导航的内部调度程序

进行调度
import { StackActions, NavigationActions } from 'react-navigation';

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

答案 1 :(得分:0)

显然,在尝试了一些方法之后。 replace似乎工作正常。

this.props.navigation.replace(ScreenName)将当前屏幕替换为指定的屏幕,而不会增加屏幕堆栈,实际上,您只是在切换屏幕。

如果有人需要帮助,我就把它留在这里。

编辑

注意-万一感到困惑,replace不会模仿reset函数的行为。

replace只是将您当前的活动屏幕或堆栈中最顶层的屏幕替换为给定屏幕,而

reset本质上会擦除您的整个导航历史记录,并根据您提供的屏幕引用创建一个新的导航对象。换句话说,您基本上可以创建一个导航堆栈,其中包含从未访问过的屏幕。 (不确定如何实现);