Dispatch with async support
export class StateProvider extends React.PureComponent { | |
static defaultProps = { | |
state: {}, | |
reducers: [], | |
middleware: [] | |
}; | |
state = this.props.state; | |
_dispatch = action => { | |
if (typeof action === 'function') { | |
return action(this._dispatch, this.state); | |
} | |
const { reducers, middleware } = this.props; | |
const continueUpdate = middleware.reduce((result, middleware) => { | |
return result !== null ? middleware(action, this.state) : result; | |
}, undefined); | |
if (continueUpdate !== null) { | |
const nextState = reducers.reduce((state, reducer) => { | |
return reducer(state, action) || state; | |
}, this.state); | |
this.setState(nextState); | |
} | |
}; | |
render () { | |
return ( | |
<StateContext.Provider value={{ state: this.state, dispatch: this._dispatch }}> | |
{this.props.children} | |
</StateContext.Provider> | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
I tried to create a simple middleware function, probably I made a mistake but could ask you if you can give me a simple example?
For example:
The middleware function have to return a function? is correct?
export function countMiddleware (state:ICounter,action: IActionType) {
if (action.type === ADD_N) {
return dispatch(sideEffectFunction());
}
}