undefined не является функцией (оценка 'navigation.dispatch') - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь перейти на первую страницу после выхода пользователя из системы!и получаю эту ошибку:

undefined не является функцией (оценивает 'navigation.dispatch').

мой код создателя действий выглядит следующим образом:

import {NavigationActions} from 'react-navigation';
import {AsyncStorage} from 'react-native';
import {applyMiddleware as dispatch} from "redux";

export const userRemove = (navigation) => {
    AsyncStorage.removeItem('user');
    const navigateAction = NavigationActions.navigate({
        routeName: 'First',
        props: {}
    });
    navigation.dispatch(navigateAction);
};

Я вызвал это действие из sideBar компонента.Код компонента правильный, так как этот AsyncStorage.removeItem ('user') работает правильно!извините за плохую грамматику.Я не могу написать по-английски лучше, чем это сообщение об ошибке здесь

мой код компонента здесь:

import React, {Component} from 'react';
import {
    Container,
    Content,
    Footer,
    FooterTab,
    Button,
    Icon
} from 'native-base';
import {userRemove} from '../actions/sideBarAction';
import {connect} from "react-redux";
import {bindActionCreators} from "redux";

class SideBar extends Component {
    constructor(props) {
        super(props);
    }

    logout() {
        userRemove(this.props.navigation);
    }

    render() {
        return (
            <Container>
                <Content>
                    ...
                </Content>
                <Footer>
                    <FooterTab>
                        <Button onPress={this.logout.bind(this)}>
                            <Icon name="logout"/>
                        </Button>
                    </FooterTab>
                </Footer>
            </Container>
        )
    }
}

const mapStateToProps = state => {
    return {
        username: state.home.username,
        password: state.home.password,
        score: state.home.score,
    }
};
const mapDispatchToProps = dispatch => {
    return Object.assign({dispatch: dispatch}, 
    bindActionCreators(userRemove, dispatch));
};

connect(mapStateToProps, mapDispatchToProps)(SideBar);

1 Ответ

0 голосов
/ 06 октября 2018

Ваш компонент добавлен в основной навигатор?Если вы не видите, можете ли вы добавить.

Вы также можете обернуть свой компонент функцией withNavigation из react-navigation.Это гарантирует, что у вас есть действительная navigation проп.

import { withNavigation } from react-navigation;

...

connect(mapStateToProps, mapDispatchToProps)(withNavigation(SideBar));

Кроме того, вы также можете передать this.props.navigation из родительского компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...