我的异步操作都是一样的,抄送,有通用的操作模式吗?
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
我的 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