【问题标题】:TypeError: Cannot read property 'navigate' of undefined - React nativeTypeError:无法读取未定义的属性“导航”-React Native
【发布时间】:2020-03-04 19:33:35
【问题描述】:

我正在使用带有 react-native 的 Firebase 来对用户进行身份验证。我的主文件是 App.js,我将用户发送到 Login 组件,我有两个组件来管理路由。 Appnavigator.js 用于创建 switchNavigator,DrawerNavigator.js 用于 createDrawernavigator。身份验证后,我想将用户发送到一个内部组件(管理员)。

以下是特定页面的代码,

登录.js

export default class Login extends React.Component {

  state = {
    email:"",
    password: "",
    errorMessage: null
  }

  handleLogin = () => {
      const { email , password } = this.state;
      firebase.auth()
          .signInWithEmailAndPassword(email, password)
          .then(() => this.props.navigation.navigate('Admin'))
          .catch(error => alert(error))
    } 
  render(){
.........................


<TouchableOpacity style={styles.loginBtn}  onPress = {
          this.handleLogin
        }>

我有两个组件来管理登录活动。 DrawerNavigator.js

import Admin from '../screens/Admin.js';
import Login from '../screens/Login.js'

import menu from '../assets/drawer.png';

const DrawerNavigator = createDrawerNavigator({

    Admin: Admin,
},
{
    drawerOpenRoute: 'openDrawer',
    drawerCloseRoute: 'DrawerClose',
    drawerToggleRoute: 'DrawerToggle'
},
);

export default DrawerNavigator;

我有 AppNavigator 页面来创建 AppContainer 和 switchnavigator。

import React from 'react';
import { createAppContainer, createSwitchNavigator } from 'react-navigation';

import DrawerNavigator from './DrawerNavigator.js';
import Login from '../screens/Login.js';
import App from '../App.js';


export default createAppContainer(
    createSwitchNavigator({
        Main:DrawerNavigator,
    })
);

我已经在handleLogin函数中使用了this.props.navigation.navigate('Admin')来路由用户登录成功后的路径。但是我遇到了一个错误

TypeError: Cannot read property 'navigate' of undefined

App.js 文件

import React from 'react';
import { StyleSheet, Platform, Text, View, Image, TextInput, TouchableOpacity } from 'react-native';import AppNavigator from './navigation/AppNavigator.js';
import Login from './screens/Login.js';
import AppNavigator from '../navigation/AppNavigator.js;
export default class App extends React.Component {

  render(){
  return (

    <Login />
<AppNavigator />
  );
}}

【问题讨论】:

  • this.props.navigationundefined。您是否将navigation 添加到this.props
  • 您是否在 DrawerNavigator 中初始化了“登录”屏幕。您只需初始化管理屏幕。
  • 或在 App.js 屏幕中登录标记处的渲染方法中 描述。
  • 我尝试添加所有上述方法。但没有一个奏效。
  • 我应该在 Login 组件的哪里添加 组件才能访问导航?

标签: javascript reactjs react-native


【解决方案1】:

您尚未将您的Login 组件添加为AppNavigator 的一部分:

export default createAppContainer(
    createSwitchNavigator({
        Main:DrawerNavigator,
        Auth: createStackNavigator(
          {
            Login: Login
          }
      )
    })
);

【讨论】:

  • 我在 createSwitchNavigator 部分添加了 Login 组件。但是,我仍然无法将用户发送到管理页面。
  • 我也尝试创建一个新方法,adminLogin = () => { return } 但还是不行。
  • 我已将您的答案替换为如下内容,``` export default createAppContainer(createSwitchNavigator({ Auth: Login, Main:DrawerNavigator, }) ); ```它成功了!
猜你喜欢
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 2020-11-05
相关资源
最近更新 更多