CodexCodex

useDispatch

useSelector is very similar to useSelector in Redux Toolkit But you must add reducer name for get dispatch in Context API by feature.

import { useDispatch } from 'use-codex'

const useUser = () => {
  const dispatch = useDispatch('counter');
  const dispatchOneAction = useCallback((key) => dispatch(increment()), [dispatch])
  const dispatchWithReduxThunk = useCallback((amount) => incrementAsync(amount)(dispatch), [dispatch])
  return { dispatchOneAction, dispatchWithReduxThunk }
}

Call Action

// Action
const increment = () => ({ type: 'counter/increment' })

const dispatch = useDispatch('counter');
const callDispatch = () => dispatch(increment())

Call Action with Thunk

Context API that not support dispatch in outside function. But you can use this as a replacement.

// Action with Thunk
const incrementAsync = amount => dispatch => {
  setTimeout(() => {
    dispatch(incrementByAmount(amount));
  }, 1000);
};

const dispatch = useDispatch('counter');
const callDispatchWithReduxThunk = (amount) => incrementAsync(amount)(dispatch)