You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
import { ReactReduxContext } from '../components/Context'; |
|
import { useStore as useDefaultStore, createStoreHook } from './useStore'; |
|
/** |
|
* Hook factory, which creates a `useDispatch` hook bound to a given context. |
|
* |
|
* @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`. |
|
* @returns {Function} A `useDispatch` hook bound to the specified context. |
|
*/ |
|
|
|
export function createDispatchHook(context) { |
|
if (context === void 0) { |
|
context = ReactReduxContext; |
|
} |
|
|
|
var useStore = context === ReactReduxContext ? useDefaultStore : createStoreHook(context); |
|
return function useDispatch() { |
|
var store = useStore(); |
|
return store.dispatch; |
|
}; |
|
} |
|
/** |
|
* A hook to access the redux `dispatch` function. |
|
* |
|
* @returns {any|function} redux store's `dispatch` function |
|
* |
|
* @example |
|
* |
|
* import React, { useCallback } from 'react' |
|
* import { useDispatch } from 'react-redux' |
|
* |
|
* export const CounterComponent = ({ value }) => { |
|
* const dispatch = useDispatch() |
|
* const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), []) |
|
* return ( |
|
* <div> |
|
* <span>{value}</span> |
|
* <button onClick={increaseCounter}>Increase counter</button> |
|
* </div> |
|
* ) |
|
* } |
|
*/ |
|
|
|
export var useDispatch = /*#__PURE__*/createDispatchHook(); |