From 4e9bea4ffd5aafbde696dc2cf5c70422752d6ddc Mon Sep 17 00:00:00 2001 From: vaynevayne <124666577+vaynevayne@users.noreply.github.com> Date: Sat, 10 Jun 2023 13:34:52 +0800 Subject: [PATCH] Update useMergedState.ts inject prevState to postState(next,prev) --- src/hooks/useMergedState.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hooks/useMergedState.ts b/src/hooks/useMergedState.ts index 1e846b54..e451279e 100644 --- a/src/hooks/useMergedState.ts +++ b/src/hooks/useMergedState.ts @@ -22,7 +22,7 @@ export default function useMergedState( defaultValue?: T | (() => T); value?: T; onChange?: (value: T, prevValue: T) => void; - postState?: (value: T) => T; + postState?: (value: T, prevValue?: T) => T; }, ): [R, Updater] { const { defaultValue, value, onChange, postState } = option || {}; @@ -42,13 +42,15 @@ export default function useMergedState( } }); + const [prevValue, setPrevValue] = useState<[T]>([mergedValue]); + const mergedValue = value !== undefined ? value : innerValue; - const postMergedValue = postState ? postState(mergedValue) : mergedValue; + const postMergedValue = postState ? postState(mergedValue,prevValue[0]) : mergedValue; // ====================== Change ====================== const onChangeFn = useEvent(onChange); - const [prevValue, setPrevValue] = useState<[T]>([mergedValue]); + useLayoutUpdateEffect(() => { const prev = prevValue[0];