目前,据我所知,reset
的react-navigation
是通过发送NavigationActions.reset();
的redux动作来完成的
控制台记录this.props.navigation
显示重置功能,但如果我尝试将其用作this.props.navigation.reset('Home')
,它会抛出一个错误newStackActions.map
不是一个函数。
我们可以在不使用redux的情况下重置整个导航吗?应该有这样的功能,我想我找不到它:/
您可以使用StackActions重置特定堆栈,并使用导航的内部调度程序对其进行调度
import { StackActions, NavigationActions } from 'react-navigation';
const resetAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: 'Profile' })],
});
this.props.navigation.dispatch(resetAction);
显然,在尝试了一些方法之后。 replace
似乎工作得很好。
this.props.navigation.replace(ScreenName)
将您当前的屏幕替换为指定的屏幕而不会增加屏幕堆栈,基本上您只需切换屏幕。
我会把它留在这里,万一有人需要帮助。
编辑
注意 - 如果有人感到困惑,replace
不会模仿reset
函数的行为。
replace
只是用给定的屏幕替换你当前的活动屏幕或堆栈的最顶层屏幕
reset
基本上擦除了整个导航历史记录,并根据您提供的屏幕参考创建了一个新的导航对象。换句话说,您基本上可以创建一个充满了您从未访问过的屏幕的导航堆栈。 (不确定它是如何可能的;))