From d7d8409a1ea9e928202f5bb8947e6566f2795ccb Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Thu, 11 Jul 2024 14:28:41 -0400 Subject: [PATCH] Fix web maintainVisibleContentPosition with strict mode enabled --- src/components/FlatList/index.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/FlatList/index.tsx b/src/components/FlatList/index.tsx index d3e0459a11bb..b45a8418d9a3 100644 --- a/src/components/FlatList/index.tsx +++ b/src/components/FlatList/index.tsx @@ -150,10 +150,13 @@ function MVCPFlatList({maintainVisibleContentPosition, horizontal = false if (!isListRenderedRef.current) { return; } - requestAnimationFrame(() => { + const animationFrame = requestAnimationFrame(() => { prepareForMaintainVisibleContentPosition(); setupMutationObserver(); }); + return () => { + cancelAnimationFrame(animationFrame); + }; }, [prepareForMaintainVisibleContentPosition, setupMutationObserver]); const setMergedRef = useMergeRefs(scrollRef, ref); @@ -176,6 +179,7 @@ function MVCPFlatList({maintainVisibleContentPosition, horizontal = false const mutationObserver = mutationObserverRef.current; return () => { mutationObserver?.disconnect(); + mutationObserverRef.current = null; }; }, []); @@ -199,6 +203,10 @@ function MVCPFlatList({maintainVisibleContentPosition, horizontal = false ref={onRef} onLayout={(e) => { isListRenderedRef.current = true; + if (!mutationObserverRef.current) { + prepareForMaintainVisibleContentPosition(); + setupMutationObserver(); + } props.onLayout?.(e); }} />