is it considered good practice to pass callBacks t

2019-01-21 10:31发布

问题:

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?

回答1:

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.



回答2:

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



回答3:

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.