将callBacks传递给redux异步操作被认为是一种好习惯吗?

时间:2015-10-15 00:50:54

标签: javascript reactjs redux

我想为成功/错误回复显示不同的通知栏, 我将两个callBack传递给我的react组件中的redux异步操作,如下所示:

<Button
  onClick={e => this.props.actions.asyncAction(item, this.showSuccessBar, this.showErrorBar)}
/>

其中asyncAction如下所示:

export function asyncAction(item, successCallback, errorCallback) {
  return (dispatch, getState) => {
    dispatch(requestItem(item));
    return fetch("api.some_url/items/item")
      .then(response => response.json())
      .then(json => {
        if (json.success) {
          dispatch(receivePostsSuccess(reddit, json));
          successCallback();
        } else {
          dispatch(receivePostsFail(reddit, json));
          errorCallback();
        }
      });
    }
  };
}

这是否反对这种模式? 换句话说,应该根据状态变化而不是callBacks打开通知栏吗?

3 个答案:

答案 0 :(得分:88)

这种模式本身就很好。如果这是组件本地的通知,请随时避免通过Redux进行连接。

那说回调是完全没必要的,因为你已经回复了承诺。等待它的完成。

this.props.dispatch(asyncAction(item)).then(onSuccess, onFailure);

但是,如果您有许多具有此类通知栏的组件,那么让减速器保留当前通知并对操作作出反应会更好。

答案 1 :(得分:2)

这将是双向数据流,这打破了第一个流量规则。

答案 2 :(得分:1)

我建议将名为smth的商店分开,如NotificationStore,并在其周围构建通知基础架构。您可以使用回调,但它可以解决未来的大问题。