Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用TabNavigator时如何直接导航到初始路线?_Javascript_React Native_React Navigation - Fatal编程技术网

Javascript 使用TabNavigator时如何直接导航到初始路线?

Javascript 使用TabNavigator时如何直接导航到初始路线?,javascript,react-native,react-navigation,Javascript,React Native,React Navigation,我正在使用react-navigation中的TabNavigator。这很好,但我需要做点小动作 当我在StackNavigator路线之间导航时,在更改选项卡后,我需要我的路线直接进入初始路线。所以我需要重置路由状态 const HomeStack = StackNavigator({ Main: { screen: HomeScreen }, Profile: { screen: ProfileScreen }, }); const AboutStack = StackNav

我正在使用
react-navigation
中的
TabNavigator
。这很好,但我需要做点小动作

当我在
StackNavigator
路线之间导航时,在更改选项卡后,我需要我的路线直接进入初始路线。所以我需要重置路由状态

const HomeStack = StackNavigator({
  Main: { screen: HomeScreen },
  Profile: { screen: ProfileScreen },


});

const AboutStack = StackNavigator({
  Main: { screen: AboutScreen },
});

TabNavigator(
  {
    Home: { screen: HomeStack },
    About: { screen: AboutStack },
  }
假设我在
主页
选项卡的
路线上,然后在切换到
关于
选项卡之前导航到
配置文件
。当我回到
Home
选项卡时,我希望我的应用程序直接导航到
Main
路线并清除历史记录。就像重置一样


有什么建议吗?

你也许可以使用
willFocus
监听器来查看你的主页

侦听器:

然后,如果您在
Main
上,并且正在导航到您的
Profile
路线。您应该在导航中设置一个参数,说明上一条路线是
Main

路线参数:
navigation.navigate('Profile',{previous_screen:'Main')

因此,现在在您的
willFocus
侦听器中:

  • 如果设置了
    previous_屏幕
    param,则表示您无需执行任何操作
  • 如果不是,则表示您来自另一个选项卡,它将导航到错误的路线。因此,您可以重置导航路线,或者只导航到“配置文件”路线
注意:

我没有尝试这个解决方案,可能过渡动画不会很平滑。所以告诉我它是否能很好地完成工作

class Profile extends Component {
  componentDidMount() {
    this.didFocusListener = this.props.navigation.addListener(
      'didFocus',
      () => { console.log('did focus') },
    );
  }

  componentWillUnmount() {
    this.didFocusListener.remove();
  }

  render() {
    return ( /* your render */ );
  }
}