import { Dispatch, useMemo, useRef } from 'react'; import useUpdate from './useUpdate'; import { IHookStateInitAction, IHookStateSetAction, resolveHookState } from './misc/hookState'; export default function useGetSet( initialState: IHookStateInitAction ): [get: () => S, set: Dispatch>] { const state = useRef(resolveHookState(initialState)); const update = useUpdate(); return useMemo( () => [ () => state.current as S, (newState: IHookStateSetAction) => { state.current = resolveHookState(newState, state.current); update(); }, ], [] ); }