我正在与本地人一起工作,我正面临导航员的问题。
代码:
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')
导致此错误的原因是什么?
答案 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
位于loginScreen
内Register
1}}本身。因此,在这种情况下,您可能需要导航到this.props.navigation.navigate('Register')
。所以你应该写AppRegistry.registerComponent('LoginForm', () => LoginForm);
。
另外,您也不需要AppRegistry
这是因为您只需要使用Appmemes
注册一个根组件。因此,AppRegistry
只应注册您已经在做的LoginForm
。 loginScreen
将Appmemes
自动挂载{{1}},{{1}}依次安装{{1}}。