From 9b5d0f2ad13bb03f87acad54b7faab3d2ea0b9ce Mon Sep 17 00:00:00 2001 From: xobotyi Date: Thu, 31 Oct 2019 02:58:48 +0300 Subject: [PATCH] feat(useGetSet): reworked with use of new resolveHookState function plus improved memory usage; --- src/useGetSet.ts | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/useGetSet.ts b/src/useGetSet.ts index 33768aea..9cb4e021 100644 --- a/src/useGetSet.ts +++ b/src/useGetSet.ts @@ -1,16 +1,21 @@ -import { useCallback, useRef } from 'react'; +import { Dispatch, useMemo, useRef } from 'react'; import useUpdate from './useUpdate'; +import { HookState, InitialHookState, resolveHookState } from './util/resolveHookState'; -const useGetSet = (initialValue: T): [() => T, (value: T) => void] => { - const state = useRef(initialValue); +export default function useGetSet(initialState: InitialHookState): [() => S, Dispatch>] { + const state = useRef(resolveHookState(initialState)); const update = useUpdate(); - const get = useCallback(() => state.current, []); - const set = useCallback((value: T) => { - state.current = value; - update(); - }, []); - return [get, set]; -}; - -export default useGetSet; + return useMemo( + () => [ + // get + () => state.current as S, + // set + (newState: HookState) => { + state.current = resolveHookState(newState, state.current); + update(); + }, + ], + [] + ); +}