react + redux 中的多次/批量删除

IT技术 reactjs react-redux redux-thunk
2021-05-10 05:45:21

我有一个允许多选和删除功能的数据网格。我的 api 中有一个删除端点;

DELETE http://localhost:8888/api/audit/id

这是动作创建者;

export function deleteAudit(audits, callback) {
    let count = 0;
    console.log("selected audits", audits);

    const deleteItem = (auditId) => {
        console.log("deleting..", auditId);

        const endpoint = `http://localhost:8888/api/audit/${auditId}`;
        const req = Axios.delete(endpoint, callback);
        return (dispatch) => {
            req.then(res => {
                if (res.status == HttpStatus.OK) {
                    console.log("deleted", auditId);
                    count += 1;
                    if (audits[count] != null) {
                        deleteItem(audits[count]);
                    }
                    else {
                        console.log("all deleted heading to callback");
                        callback();
                    }
                }
            });
            dispatch({type:DELETE_AUDIT, payload: audits});
        }
    }
    deleteItem(audits[count]);
}

由于我的端点一次只允许删除一个项目,因此我使用递归函数连续调用。但是,当使用 async(thunk) 方法忽略时,这不能正常工作,它没有用新状态刷新列表。添加 thunk 调度方法后,它只会删除第一个选择,所以我完全迷失了。实现这一目标的正确方法是什么?

1个回答

问题是,我没有导入redux-thunk包,导入后,正如@Tho Vu 在 axios 上指出的那样,我已将代码更改如下;

export const deleteAudit = (audits, callback) => {

    const request = axios.all(_.map(audits, (audit) => 
    {   
        deleteItem(audit);
    }));
    return (dispatch) => {
        request.then(axios.spread((a, f) => {
            dispatch({type:DELETE_AUDIT, payload:audits});
        })).then(() => {
            callback();
        });
    }
}
function deleteItem(id) {
    const endpoint = `http://localhost:8888/api/audit/${id}`;
    return axios.delete(endpoint);
}