Не удается прочитать свойство 'навигация' из неопределенного - React Native - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в React-Native. Я просто продолжаю получать ту же ошибку, что "Не могу прочитать свойство 'навигация' из неопределенного". Вот пример кода

export default class Form extends Component {
    constructor(props) {
        super(props);
        this.loginHandler = this.loginHandler.bind(this);
        this.navigate  = this.props.navigation;
        this.successCallback = this.successCallback.bind(this);
        this.state = {
            email: '',
            password: '',
        }
    }

    // TODO - Login Authentication
    loginHandler() {
        var loginUrl = 'someURL';
        fetch(loginUrl, {
            method: 'POST',
            headers: {
                Accept: 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                username: this.state.email,
                password: this.state.password
            }),
        })
            .then(response => { return response.json(); })
            .then(responseData => { return responseData; })
            .then((responseData) => {
                this.successCallback(responseData.token)
            })
            .catch((err) => { console.log(err); });

    }

    successCallback(token) {
        if (token === undefined)
            alert("Email or password is incorrect !");
        else {
            this.props.navigation.navigate('User', {tokenFromUser: token});
        }

}

В функции successCallback, если сгенерирован токен, это означает, что учетные данные для входа в систему верны, поэтому он должен перейти к экрану пользователя с парером 'token'. Может кто-нибудь мне помочь ?

Вот как я вызываю функцию loginHandler

        <TouchableOpacity style={styles.button} onPress={this.loginHandler} >
            <Image source={loginImage} style={styles.image} />
            <View style={styles.SeparatorLine} />
            <Text style={styles.text}>
                Enter
            </Text>
        </TouchableOpacity>

1 Ответ

0 голосов
/ 14 сентября 2018

Ну, я нашел решение, я думаю.Когда я вызываю компонент Form.js, я просто добавил {... this.props} в качестве реквизита.

<Form {...this.props}   />

Так, потому что реквизиты Form.js были пустыми.

...