我有一个动作创建者,它接受一个id和一个回调函数。它向服务器发送请求以执行某些操作并返回虚拟操作。我想在这里做的就是调用回调函数并退出,因为这个虚拟动作对我没用,例如喜欢帖子。我只需要服务器知道用户喜欢帖子,我没有一些状态更改,我可以通过回调更改类似的按钮状态。所以我的问题是我们是否需要动作创建者来返回动作。这是我的代码
export const deleteProduct = (id,cb) => async (dispatch) => {
let res = await axios.delete(`${BASE_URL}/api/v1/product/${id}`,
{withCredentials:true})
cb();
dispatch({type: DUMMY, payload : res.data});
};
删除产品后,我可以在回调被触发时从列表中隐藏该产品。我是否需要明确调用调度或是可选的。 ?我正在使用Redux-thunk处理axios承诺。
答案 0 :(得分:2)
在redux-thunk
调度中完全是可选的。事实上,其中一个main motivations是提供条件派遣。
所以是的,你可以完全做到:
export const deleteProduct = (id,cb) => async () => {
let res = await axios.delete(`${BASE_URL}/api/v1/product/${id}`,
{withCredentials:true})
cb();
};
但是,我认为这打破了redux的一个主要概念,即unidirectional data flow。这个概念是数据应该只在一个方向流动。视图将调度操作以更新存储以触发渲染以更新视图。视图不应该从结果中发送和操作并重新呈现。
基本上,如果要在删除后隐藏列表中的项目,而不是在回调中执行此操作,则应调度操作以更新商店中的数据,并让react-redux
重新呈现组件没有删除的项目。