【问题标题】:goBack always taking to home/first screen in react-navigationgoBack 总是在反应导航中回到主页/第一个屏幕
【发布时间】:2017-11-03 11:31:02
【问题描述】:

我正在开发一个应用程序,但返回按钮没有将我带到返回屏幕。

App.js

import React, { Component } from 'react';
import one from './components/test/one';
import two from './components/test/two';
import three from './components/test/three';

import { DrawerNavigator } from 'react-navigation';

const AppNavigator = DrawerNavigator({
    one: {
      screen: one,
    },
    two: {
      screen: two,
    },
    three: {
      screen: three,
    },
  }
);

export default () =>
      <AppNavigator />;

components/test/one.js

import React, { Component } from 'react';
import { Button } from 'react-native';

export default class one extends React.Component {
  static navigationOptions = {
    drawerLabel: 'one',
  };

  render() {
    return (
      <Button
        onPress={() => this.props.navigation.navigate('two')}
        title="Go to Two"
      />
    );
  }
}

components/test/two.js

import React, { Component } from 'react';
import { Button } from 'react-native';

export default class two extends React.Component {
  static navigationOptions = {
    drawerLabel: 'two',
  };

  render() {
    return (
      <Button
        onPress={() => this.props.navigation.navigate('three')}
        title="Go to 3"
      />
    );
  }
}

components/test/three.js

import React, { Component } from 'react';
import { Button } from 'react-native';

export default class three extends React.Component {
  static navigationOptions = {
    drawerLabel: 'three',
  };

  render() {
    return (
      <Button
        onPress={() => this.props.navigation.goBack()}
        title="Go back to 2"
      />
    );
  }
}

单击“转到第二个”=>“转到 3”=>“返回到 2”。 在屏幕 3 上,单击“返回 2”总是将我带到 one.js。

如果我将它们合并到一个文件中,它甚至都不起作用。

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    您要么使用了错误的Navigator comp,要么您的要求不明确。基本上,您想使用StackNavigator 来实现您想要的行为。

    关键是,DrawerNavigator 用于构建抽屉菜单。如果您从左侧滑动,您会看到包含所有屏幕的导航抽屉,如下图所示。

    如果您在屏幕上添加如下所示的按钮,您将看到您的菜单打开。

    <Button title="MENU" onPress={() => this.props.navigation.navigate('DrawerOpen')} />
    

    结论是,每当我们使用DrawerNavigator 时,我们总是会回到初始路线,即我们定义为第一项的任何内容,或者使用DrawerNavigator 的第二个参数的initialRouteName 键。

    顾名思义,只有StackNavigator 支持您想要实现的这种堆叠顺序。

    您可以做的是在DrawerNavigator 的其中一个屏幕中包装一个新的StackNavigator。例如:

    const AppNavigator = DrawerNavigator({
        drawer1: {
            screen: drawer1,
        }
    });
    
    const drawer1 = StackNavigator({
        one: { screen: one },
        two: { screen: two },
        three: { screen: three },
    });
    

    【讨论】:

    • 这个答案绝对拯救了我的一天。:) 谢谢。
    • 如何从drawerNavigator将参数传递给屏幕'one'?
    • 尝试改变drawer1变量名和它的用法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多