reshow-flux
Version:
The smallest react flux and Fast hook alternative
33 lines (31 loc) • 871 B
JavaScript
// @ts-check
import { useRef } from "react";
import { createReducer } from "reshow-flux-base";
/**
* useReducer alternative for External store.
* https://reactjs.org/docs/hooks-reference.html#usereducer
*
*
* ## Base usage
*
* const [store, dispatch] = useReduceStore(reduceCallback, initial[Map|Function]);
*
* Call dispatch will not trigger re-render.
*
*
* @template StateType
* @template ActionType
* @param {import('reshow-flux-base').ReducerType<StateType, ActionType>} reducer
* @param {import('reshow-flux-base').InitStateType<StateType>} [initialState]
*/
var useReduceStore = function useReduceStore(reducer, initialState) {
/**
* @type any
*/
var lastReducer = useRef();
if (!lastReducer.current) {
lastReducer.current = createReducer(reducer, initialState);
}
return lastReducer.current;
};
export default useReduceStore;