mirror of
https://github.com/dergigi/boris.git
synced 2026-01-18 06:14:27 +01:00
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).
This commit is contained in:
@@ -295,13 +295,18 @@ const ContentPanel: React.FC<ContentPanelProps> = ({
|
||||
}, [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(() => {
|
||||
|
||||
Reference in New Issue
Block a user