【问题标题】:Is it necessary for action creators to return an action ?动作创建者是否有必要返回动作?
【发布时间】:2017-11-23 02:11:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    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 重新渲染该组件而不使用已删除其中的项目。

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 2017-12-12
      • 2018-12-25
      • 2017-04-14
      • 1970-01-01
      • 2015-07-18
      • 2017-11-14
      • 2021-05-30
      • 2017-12-09
      相关资源
      最近更新 更多