代码之家  ›  专栏  ›  技术社区  ›  Ali Shariati

undefined不是函数(计算“navigation.dispatch”)

  •  0
  • Ali Shariati  · 技术社区  · 8 年前

    得到这个错误:

    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);
    };
    

    我从组件的侧栏中调用了这个操作。组件代码正确,因为AsyncStorage.removeItem('user')工作正常! 抱歉语法不好。我的英语写得再好不过了 error message here

    我的组件代码在这里:

    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 回复  |  直到 8 年前
        1
  •  1
  •   vahissan    8 年前

    也可以使用 withNavigation 函数来自 react-navigation . 那会确保你有有效的 navigation 道具。

    import { withNavigation } from react-navigation;
    
    ...
    
    connect(mapStateToProps, mapDispatchToProps)(withNavigation(SideBar));
    

    或者,你可以通过 this.props.navigation

    推荐文章