undefined不是对象(评估_this2.props.navigation.navigate)

时间:2017-09-13 16:46:06

标签: javascript node.js reactjs react-native react-native-navigation

我正在与本地人一起工作,我正面临导航员的问题。

代码:

App.js

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

import { StackNavigator } from 'react-navigation';

import loginScreen from './src/components/loginView';
import registerScreen from './src/components/registerView';

const Appmemes = StackNavigator({
   Login: {screen: loginScreen},
   Register: {screen: registerScreen}
});

export default Appmemes;

AppRegistry.registerComponent('Appmemes', () => Appmemes);

loginView.js正常工作:

.
.
.
  <View style={styles.formContainer}>
          <LoginForm/>
  </View>
.
.
.    

LoginForm.js

import React, { Component } from 'react'
import { StyleSheet, TextInput, Text, View, TouchableOpacity, AppRegistry} from 'react-native'
import { StackNavigator} from 'react-navigation';

export default class LoginForm extends Component{
  render() {
      return(
      <View style={styles.container}>

          <TouchableOpacity style={styles.buttonContainer1}>
            <Text style={styles.buttonText}>Entrar</Text>
          </TouchableOpacity>

          <TouchableOpacity style={styles.buttonContainer2} onPress={() => this.props.navigation.navigate('Login')}>

            <Text style={styles.buttonText}>Registrarse</Text>
          </TouchableOpacity>
      </View>
    );
  }
}

AppRegistry.registerComponent('LoginForm', () => LoginForm);

const styles = StyleSheet.create({...]);
});

错误是:

  

undefined不是对象(评估_this2.props.navigation.navigate)

错误位于LoginForm.js中的OnPress()

onPress={() => this.props.navigation.navigate('Login')

导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:4)

简单。 <LoginForm navigation={this.props.navigation} />

发生错误是因为LoginFrom没有直接使用StackNavigator加载,只有StackNavigator直接加载的那些组件才会获得navigation道具(如在你的情况下loginScreen)。 loginScreen内的任何嵌套组件都不会自动收到navigation道具,因此我们需要将其明确传递给LoginForm,因为它会传递给loginScreen.

我已经回答了类似的问题here

旁注:我相信您使用loginScreen再次从loginScreen内部导航到this.props.navigation.navigate('Login')LoginForm位于loginScreenRegister 1}}本身。因此,在这种情况下,您可能需要导航到this.props.navigation.navigate('Register')。所以你应该写AppRegistry.registerComponent('LoginForm', () => LoginForm);

另外,您也不需要AppRegistry这是因为您只需要使用Appmemes注册一个根组件。因此,AppRegistry只应注册您已经在做的LoginFormloginScreenAppmemes自动挂载{{1}},{{1}}依次安装{{1}}。