重置导航而不使用redux

问题描述 投票:0回答:2

目前,据我所知,resetreact-navigation是通过发送NavigationActions.reset();的redux动作来完成的

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

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

react-native react-navigation
2个回答
1
投票

您可以使用StackActions重置特定堆栈,并使用导航的内部调度程序对其进行调度

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

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

0
投票

显然,在尝试了一些方法之后。 replace似乎工作得很好。

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

我会把它留在这里,万一有人需要帮助。

编辑

注意 - 如果有人感到困惑,replace不会模仿reset函数的行为。

replace只是用给定的屏幕替换你当前的活动屏幕或堆栈的最顶层屏幕

reset基本上擦除了整个导航历史记录,并根据您提供的屏幕参考创建了一个新的导航对象。换句话说,您基本上可以创建一个充满了您从未访问过的屏幕的导航堆栈。 (不确定它是如何可能的;))

© www.soinside.com 2019 - 2024. All rights reserved.