【问题标题】:Multiple/bulk delete in react + reduxreact + redux中的多次/批量删除
【发布时间】:2019-02-28 21:46:37
【问题描述】:

我有一个允许多项选择和删除功能的数据网格。我的 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 调度方法后,它只删除了第一个选择,所以我完全迷失了。实现这一目标的正确方法是什么?

【问题讨论】:

  • 看来你需要dispatch(deleteItem(audits[count]))
  • @iofjuupasli 那么reducer如何知道类型呢?你能告诉我如何实现吗,我没明白?
  • 好像你用的是axios。您是否尝试过使用 axios.all 而不是正常迭代?
  • @ThoVu 是的,我正在使用 axios,我不知道 axios 的功能,让我检查一下

标签: reactjs react-redux redux-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);
}

【讨论】:

  • 请把您的所有ID一次性发送,以便在一次查询中一并删除。你的回答对你的问题是正确的;但是,这不是一个一个发送删除请求的有效方法。这太累了。
猜你喜欢
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多