我的异步操作都是一样的,抄送,有通用的操作模式吗?

My async actions are all same , carbon copy , is there generic action pattern?

我的 redux 异步操作都是一样的。 唯一的变化是 'LOAD_TODOS_REQUEST'、'LOAD_TODOS_SUCCESS'、'LOAD_TODOS_FAILURE' 类型和端点。

是否有扩展或通用模式,我将端点作为参数发送并且我只处理捕获自动生成的减速器 'LOAD_XX_REQUEST'、'LOAD_XX_SUCCESS'、'LOAD_XX_FAILURE'.

谢谢。

如果您发现您的 reducer 对于多个端点的行为完全相同,我的第一个尝试是使用 一个 通用异步操作来获取数据,使实际端点成为动作的负载:

const loadEndpoint = (endpoint, toDispatchOnSuccess) => (dispatch) => {
    // pass endpoint so that for example a loading indicator could state what exactly is being fetched.
    dispatch(loadEndpointRequest(endpoint));

    return httpClientOfYourChoice.get(endpoint)
        .then((data) => {
            dispatch(loadEndpointSuccess(endpoint, data));

            // If the data needs to go to a specific, other reducer in the end,
            // this action could be something like 'TODOS_RECEIVE' that puts the
            // data in state.todos.items, or something like that.
            dispatch(toDispatchOnSuccess(data));
        })
        .catch((error) => dispatch(loadEndpointFailure(endpoint, error)));
};

(如您所说,将端点作为参数发送)。

如果由于某种原因这不可行,您可以查看一些 github 项目,如果您 google "redux rest"、"redux api client"、"redux endpoint boilerplate"等..

请注意,reducer 会失去特异性。如果同时获取两个端点,如何显示潜在错误?将端点映射到最后发生的错误?

虽然一遍又一遍地实现相同的异步操作模式很无聊,但通常不会花费很长时间,而且它保证的简单性可能会在长期 运行 中得到回报。完全通用和自动化会带来有趣的新问题。

检查一下,我们在之前的项目中使用了那个库。
https://github.com/kolodny/redux-await