开发者问题收集

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