Redux middleware for subscribing to observables in action creators.
Checkout demo or read below.
import observableMiddleware from 'redux-observable-middleware';
const ACTION_TYPE = 'INTERVAL';
function reducer(state = null, action) {
console.log(action);
switch (action.type) {
case `${ACTION_TYPE}_ON_NEXT`:
return action.data;
case `${ACTION_TYPE}_ON_ERROR`:
return state;
case `${ACTION_TYPE}_ON_COMPLETED`:
return state;
default:
return state;
}
}
const store = Redux.createStore(reducer, Redux.applyMiddleware(observableMiddleware));
store.subscribe(() => {
console.log(store.getState());
});
store.dispatch({
type: ACTION_TYPE,
observable: Rx.Observable.interval(1000).take(5),
});It's very simple, the middleware will attempt to subscribe to any object with a subscribe method on it. ![]()
Use redux-observable-middleware just like you would with any other Redux middleware.
import { createStore, applyMiddleware } from 'redux';
import observableMiddleware from 'redux-observable-middleware';
const store = createStore(
reducer,
applyMiddleware(observableMiddleware));In your action creator, your action need to have two properties:
type: string|object- If
typeis a string, it will dispatch four different actions. Assuming the string is 'ACTION_A', action type will be:ACTION_AimmediatelyACTION_A_ON_NEXTACTION_A_ON_ERRORACTION_A_ON_COMPLETED
- If
typeis an object, it will look for keys to specify action types:onSubscribeonNextonErroronCompleted
- When
typeis an object, any action type with an unspecified key will be ignored. E.g. if you only defineonNext, the other three action will never be dispatched.
- If
observable: Observablecan be any object with asubscribemethod on it.
onSubscribeaction type, object will have all original object properties, including theobservableproperty, except fortypeproperty. Iftypeis an object. It will be replaced with thevalueontype.onSubscribeonNextaction type, object will havedataandtypeproperties.onErroraction type, object will haveerrandtypeproperties.onCompletedaction type, object will only havetypeproperty.