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?
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.
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.
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.This would be bi-directional data flow, which breaks the first rule of flux.