【问题标题】:Navigation in React Native going to wrong pageReact Native 中的导航转到错误的页面
【发布时间】:2020-03-18 22:21:09
【问题描述】:

我正在使用 react-native: 0.61.4。

在 app.js 我有

import React from 'react';
import { View, Text } from 'react-native';
import {createAppContainer} from 'react-navigation';
import {createStackNavigator} from 'react-navigation-stack';
import HomeScreen from './pages';
import ProfileScreen from './pages';

const MainNavigator = createStackNavigator({
  Home: {screen: HomeScreen},
  Profile: {screen: ProfileScreen}
});

const App = createAppContainer(MainNavigator);

export default App;

在 pages.js 我有

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

export default class HomeScreen extends React.Component {
  static navigationOptions = {
    title: 'Main Page',
  };
  render() {
    const {navigate} = this.props.navigation;
    return (
      <View style={{flex: 1}}>
        <Text>You are on the main Page</Text>
        <Button
          title="Go to Profile"
          onPress={() => navigate('Profile')}
        />
      </View>
    );
  }
}

class ProfileScreen extends React.Component {
  static navigationOptions = {
    title: 'Profile',
  };
  render() {
    return (
      <View style={{flex: 1}}>
        <Text>You are on the profile page</Text>
      </View>
    );
  }
}

在 IOS 模拟器上,应用程序正确加载并显示 HomeScreen。但是,当单击该按钮时,它并没有像应有的那样将我带到 ProfileScreen,而是在堆栈中向前移动到 HomeScreen 的相同页面,除了该页面具有返回到实际 HomeScreen 的后退按钮。有人知道我的导航出了什么问题吗?

【问题讨论】:

    标签: react-native react-native-navigation react-navigation-stack


    【解决方案1】:

    您在 pages.js 中使用默认导出,而不是仅将 HomeScreen 作为默认导出切换到:

    export { HomeScreen, ProfileScreen };
    

    所以你可以在 app.js 中访问它们,并将它们导入为

    import { HomeScreen, ProfileScreen } from './pages';
    

    【讨论】:

    • 谢谢 - 我不确定我是否按照您在 pages.js 中所说的去做。您是说从HomeScreen 中删除export default 并在课程后添加export default { HomeScreen, ProfileScreen };
    • 是的,你正在做的只是导出主屏幕,所以当你在 app.js 中导入它时: import HomeScreen from './pages';从 './pages' 导入 ProfileScreen;您实际上在做的是导入两个具有不同名称的 HomeScreen 实例
    • 谢谢,我试过了,但出现错误:Error: The component for route 'Home' must be a React Component.
    • 你是对的没有默认,我会更新我的答案
    猜你喜欢
    • 2019-03-13
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多