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];