【问题标题】:Cannot call an action function from an action creator无法从动作创建者调用动作函数
【发布时间】:2019-01-20 23:57:00
【问题描述】:

不幸的是,我无法从 catch 错误块中调用 handleApiErrors。函数没有被调用,这行代码handleApiErrors(error, 'Data could not be retrieved')被忽略)

dispatch 的双重使用似乎导致了问题,但根据 thunk 文档,它应该可以工作

const getInitialData = () => (dispatch) => {
    getBookList()
        .then((books) => {
            dispatch(fetchBooksSuccess(books));
        })
        .catch((error) => {
            handleApiErrors(error, 'Data could not be retrieved') 
        });
    };


const handleApiErrors = (error, userMessage = '') => (dispatch) => {
    const { response, message } = error;
    let errorMessage = '';
    switch (response.status) {
        case 401:
            errorMessage = 'You are not authenticated';
            break;
        case 403:
            errorMessage = 'You are not authorized to access this ressource';
            break;
        case 500:
            errorMessage = `${userMessage} There was an internal error, please try again`;
            break;
        case 503:
            errorMessage = `${userMessage} The network connection is unavailable at the moment`;
            break;
        default:
            errorMessage = message;
     }
     dispatch(setApiErrors(errorMessage));
};

【问题讨论】:

    标签: reactjs redux redux-thunk


    【解决方案1】:

    动作应该是简单的返回函数。

    dispatch(handleApiErrors(error, 'Data could not be retrieved'));
    
    
    const handleApiErrors = (error, userMessage = '') => {
    const { response, message } = error;
    let errorMessage = '';
    switch (response.status) {
        case 401:
            errorMessage = 'You are not authenticated';
            break;
        case 403:
            errorMessage = 'You are not authorized to access this ressource';
            break;
        case 500:
            errorMessage = `${userMessage} There was an internal error, please try again`;
            break;
        case 503:
            errorMessage = `${userMessage} The network connection is unavailable at the moment`;
            break;
        default:
            errorMessage = message;
     }
     setApiErrors(errorMessage);
    };
    

    【讨论】:

    • 哦,是的,谢谢,我忘记了调度,但实际上按照您的建议将此操作移至辅助函数,因为它对于操作来说太复杂了
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    相关资源
    最近更新 更多