From 496bbc36f4fc58b6cb16f23dbdddd2273555c807 Mon Sep 17 00:00:00 2001 From: Gigi Date: Wed, 22 Oct 2025 23:22:16 +0200 Subject: [PATCH] fix(reading): prevent saveNow from firing on every position change The unmount effect had saveNow in its dependency array. Since saveNow is a useCallback that depends on position, it was recreated on every scroll event, triggering the effect cleanup and calling saveNow() repeatedly (every ~14ms). Now using a ref to store the latest saveNow callback, so the cleanup only runs when selectedUrl changes (i.e., when actually navigating away). --- src/components/ContentPanel.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/ContentPanel.tsx b/src/components/ContentPanel.tsx index cc5cec04..85f8dfe0 100644 --- a/src/components/ContentPanel.tsx +++ b/src/components/ContentPanel.tsx @@ -295,13 +295,18 @@ const ContentPanel: React.FC = ({ }, [isTextContent, activeAccount, relayPool, eventStore, articleIdentifier, settings?.syncReadingPosition, selectedUrl, suppressSavesFor]) // Save position before unmounting or changing article + const saveNowRef = useRef(saveNow) + useEffect(() => { + saveNowRef.current = saveNow + }, [saveNow]) + useEffect(() => { return () => { - if (saveNow) { - saveNow() + if (saveNowRef.current) { + saveNowRef.current() } } - }, [saveNow, selectedUrl]) + }, [selectedUrl]) // Close menu when clicking outside useEffect(() => {