react-native-navigation 给出错误“未定义不是对象(评估‘_this.props.navigation.navigate’)”
2018-12-26
300
我试图从登录页面导航到主页,但是我的登录表单位于另一个名为“组件”的文件夹中,当我使用 touchableOpacity 从登录页面导航时它可以正常工作,但是当我从登录表单组件执行同样的事情时,它会给我一个错误。有人能告诉我我做错了什么吗?
这是我尝试执行的代码。
Login.js 代码
import React, {Component} from 'react';
import {Text, View, ScrollView} from 'react-native';
import LoginForm from '../components/LoginForm';
type Props = {};
export default class Login extends Component<Props> {
static navigationOptions = {
header: null
}
render() {
return (
<ScrollView>
<View>
<LoginForm/>
</View>
<View>
<Text> Skip login and goto</Text>
<Text onPress={()=>this.props.navigation.navigate('Home')}>
Home
</Text>
</View>
</ScrollView>
);
}
}
LoginForm.js 代码
import React, {Component} from 'react';
import {
View,
Text,
TextInput,
TouchableOpacity,
} from 'react-native';
type Props = {};
export default class LoginForm extends Component<Props> {
render() {
return (
<View>
<TextInput
placeholder={'Email'}
keyboardType={'email-address'}
autoCapitalize={'none'}
/>
<TextInput
placeholder={'Password'}
secureTextEntry={true}
/>
<TouchableOpacity
activeOpacity={0.6}
onPress={()=>this.props.navigation.navigate('Home')}
>
<Text>
Home
</Text>
</TouchableOpacity>
</View>
);
}
}
这是错误的屏幕截图: 导航到另一个文件夹中的页面时出错
请帮助我摆脱这个错误。提前致谢。:)
2个回答
您可以使用
withNavigation
或者您应该将导航作为 props 传递给子组件。
import React, {Component} from 'react';
import {
View,
Text,
TextInput,
TouchableOpacity,
} from 'react-native';
import { withNavigation } from 'react-navigation';
type Props = {};
class LoginForm extends Component<Props> {
render() {
return (
<View>
<TextInput
placeholder={'Email'}
keyboardType={'email-address'}
autoCapitalize={'none'}
/>
<TextInput
placeholder={'Password'}
secureTextEntry={true}
/>
<TouchableOpacity
activeOpacity={0.6}
onPress={()=>this.props.navigation.navigate('Home')}
>
<Text>
Home
</Text>
</TouchableOpacity>
</View>
);
}
}
export default withNavigation(LoginForm);
Nazır Dogan
2018-12-26
在 LoginForm.js 的末尾,你需要输入
export {LoginForm};
如果这不起作用,请尝试像这样导入:import {LoginForm} from '../components/LoginForm';
Danilo Pereira
2018-12-26