UNPKG

@ovine/core

Version:

Build flexible admin system with json.

36 lines (35 loc) 1.14 kB
/** * 公用的hooks 封装 */ import produce from 'immer'; import { isArray } from 'lodash'; import { useCallback, useRef, useEffect, useReducer, useState } from 'react'; import { subscribe, Handler } from "./message"; export function useImmer(initialValue) { const [val, updateValue] = useState(initialValue); return [ val, useCallback((updater) => { updateValue(produce(updater)); }, []), ]; } export function useImmerReducer(reducer, initialState, initialAction) { const cachedReducer = useCallback(produce(reducer), [reducer]); return useReducer(cachedReducer, initialState, initialAction); } export function useSubscriber(key, handler) { const deps = isArray(key) ? key : [key]; useEffect(() => { const { unsubscribe } = subscribe(key, handler); return unsubscribe; }, deps); } export function usePersistFn(fn) { const ref = useRef(() => { throw new Error('Cannot call function while rendering.'); }); ref.current = fn; const persistFn = useCallback(((...args) => ref.current(...args)), [ref]); return persistFn; }