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 ( {props.children} ) } 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 } }