动作创作者是否有必要返回动作?

时间:2017-11-23 02:11:05

标签: javascript reactjs redux react-redux redux-thunk

我有一个动作创建者,它接受一个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承诺。

1 个答案:

答案 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重新呈现组件没有删除的项目。