Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
- if (typeof action === 'function') {
- action(dispatch, () => appState)
- } else {
- dispatch(action)
- }
- }
- return { ...acc, [key]: fn }
- }, {})
- return [stateExtract, actions]
- }
- return { Provider, useRedux }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement