is it considered good practice to pass callBacks t

2019-01-21 10:42发布

I want to show different notification bars for success/error responses, I pass two callBacks to an redux async action in my react component like this:

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

where asyncAction looks like this:

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();
        }
      });
    }
  };
}

Is this considered against the pattern? in other words, Should Notification Bars open according to the state change instead of callBacks?

3条回答
Root(大扎)
2楼-- · 2019-01-21 11:04

The pattern is fine per se. If this is a notification local to the component, feel free to avoid wiring it through Redux.

That said callbacks are completely unnecessary because you are already returning the promise. Just wait for its completion.

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

However if you have many components with such notification bars, it's better to have a reducer keeping the current notification and reacting to actions.

查看更多
爷、活的狠高调
3楼-- · 2019-01-21 11:09

I suggest having separated store named smth like NotificationStore and build notifications infrastructure around it. You can use callbacks, but it's way to big problems in future.

查看更多
叼着烟拽天下
4楼-- · 2019-01-21 11:19

This would be bi-directional data flow, which breaks the first rule of flux.

查看更多
登录 后发表回答