存在'dispatch'关键字时未调用功能

时间:2019-08-28 08:18:11

标签: react-native redux react-redux redux-thunk

我有这种方法:

export const logout = replace => async dispatch => {
    Alert.alert(
        "Logout",
        "Are you sure?",
        [{
                text: "No",
                style: "cancel"
            },
            {
                text: "OK",
                onPress: () => logoutUser()
            }
        ], {
            cancelable: false
        }
    );
};

dispatch关键字在那里时,它不会被调用。不确定发生了什么,因为我的商店似乎配置正确(我已经通过将数据添加到状态并通过控制台记录该数据来进行测试)。

import {
    createStore,
    applyMiddleware
} from "redux";
import thunk from "redux-thunk";

import rootReducer from "./reducers";

const middleware = [thunk];

const initialState = {};

const configureStore = createStore(
    rootReducer,
    initialState,
    applyMiddleware(...middleware)
);

export default configureStore;

不知道我在做什么错了。


编辑:

整个logout方法:

export const logout = replace => {
    console.log("entered?"); // never prints

    const logoutUser = async () => {
        dispatch({
            type: LOGOUT
        });

        await SecureStore.deleteItemAsync("jwt");

        replace("Home", {
            name: "Home"
        });
    };

    Alert.alert(
        "Logout",
        "Are you sure?",
        [{
                text: "No",
                style: "cancel"
            },
            {
                text: "OK",
                onPress: () => logoutUser()
            }
        ], {
            cancelable: false
        }
    );
};

2 个答案:

答案 0 :(得分:0)

const logoutUser = () => dispatch => {
        dispatch({
            type: LOGOUT
        });


        replace("Home", {
            name: "Home"
        });
    };

答案 1 :(得分:0)

好的,所以我弄清楚了(有点)。 hacky方法,但是,嘿,那是编程。

无论如何,我试图从logout访问navigationOptions,它本身是一种导出方法,而不是“连接”到应用程序。无论如何,我放弃了=> async dispatch {并从/src/store导入了商店,并执行以下操作:

import store from "../store";

export const logout = async replace => {
    await SecureStore.deleteItemAsync("jwt");

    store.dispatch({
        type: LOGOUT
    });

    replace("Home", {
        name: "Home"
    });
};