function initRedux(reducer, initialState) {
    const StateContext = React.createContext(null)
	const DispatchContext = React.createContext(null)

	function Provider(props) {
		const [appState, dispatch] = React.useReducer(reducer, initialState)
		return (
			<StateContext.Provider value={appState}>
				<DispatchContext.Provider value={dispatch}>
                    {props.children}
                </DispatchContext.Provider>
			</StateContext.Provider>
		)
	}

	function useRedux(extractState, actionMap) {
		const appState = React.useContext(StateContext)
		const dispatch = React.useContext(DispatchContext)

		const stateExtract = extractState(appState)

		const actions = Object.keys(actionMap).reduce((acc, key) => {
			const actionCreator = actionMap[key]
			const fn = (...args) => {
				const action = actionCreator(...args)
				dispatch(action)
			}
			return { ...acc, [key]: fn }
		}, {})

		return [stateExtract, actions]
	}

	return { Provider, useRedux }
}