diff --git a/src/recyclerview/hooks/useBoundDetection.ts b/src/recyclerview/hooks/useBoundDetection.ts index 8f933332c..5db8e1051 100644 --- a/src/recyclerview/hooks/useBoundDetection.ts +++ b/src/recyclerview/hooks/useBoundDetection.ts @@ -104,8 +104,9 @@ export function useBoundDetection( if (onStartReached) { const onStartReachedThreshold = onStartReachedThresholdProp ?? 0.2; const startThresholdDistance = onStartReachedThreshold * visibleLength; + const startBaseline = Math.max(0, recyclerViewManager.firstItemOffset); - const isNearStart = lastScrollOffset <= startThresholdDistance; + const isNearStart = lastScrollOffset <= startBaseline + startThresholdDistance; if (isNearStart && !pendingStartReached.current) { pendingStartReached.current = true; @@ -146,9 +147,10 @@ export function useBoundDetection( } }, [requestAnimationFrame, scrollViewRef, recyclerViewManager]); - // Reset end reached state when data changes + // Reset start/end reached state when data changes useMemo(() => { pendingEndReached.current = false; + pendingStartReached.current = false; // needs to run only when data changes // eslint-disable-next-line react-hooks/exhaustive-deps }, [data]);