From c4036cade8d9aaee1c4d3d42d199ace63abb74fe Mon Sep 17 00:00:00 2001 From: Viki Date: Mon, 9 Sep 2024 20:10:18 +0800 Subject: [PATCH] fix(useInfiniteScroll): fix not loading when it has more space to scroll after first load --- packages/react-use/src/use-infinite-scroll/index.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-use/src/use-infinite-scroll/index.ts b/packages/react-use/src/use-infinite-scroll/index.ts index c00cd40..e49a126 100644 --- a/packages/react-use/src/use-infinite-scroll/index.ts +++ b/packages/react-use/src/use-infinite-scroll/index.ts @@ -5,6 +5,7 @@ import { useMount } from '../use-mount' import { useRafState } from '../use-raf-state' import { useStableFn } from '../use-stable-fn' import { useTargetElement } from '../use-target-element' +import { useUpdateEffect } from '../use-update-effect' import type { ElementTarget } from '../use-target-element' @@ -89,7 +90,10 @@ export function useInfiniteScroll( const latest = useLatest({ state, canLoadMore, direction, onScroll, onLoadMore, interval }) const calculate = useStableFn(async () => { - if (!latest.current.canLoadMore(previousReturn.current)) return + if (!latest.current.canLoadMore(previousReturn.current)) { + setState({ isLoadDone: true, isLoading: false }) + return + } if (!el.current || latest.current.state.isLoading) return @@ -121,6 +125,10 @@ export function useInfiniteScroll( useMount(immediate && calculate) + useUpdateEffect(() => { + if (!state.isLoading) calculate() + }, [state.isLoading]) + useEventListener( el, 'scroll',