From 8129b8353cfbe1d3ba5d94c2f00ed8d37a30d166 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Fri, 19 Jan 2024 02:11:49 +0000 Subject: [PATCH] scroll --- src/lib/hooks/useWebScrollRestoration.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/hooks/useWebScrollRestoration.ts b/src/lib/hooks/useWebScrollRestoration.ts index 8ded0adcf6..f68fbf0f2f 100644 --- a/src/lib/hooks/useWebScrollRestoration.ts +++ b/src/lib/hooks/useWebScrollRestoration.ts @@ -23,6 +23,10 @@ export function useWebScrollRestoration() { if (state.focusedKey) { // Remember where we were for later. state.scrollYs.set(state.focusedKey, window.scrollY) + // TODO: Strictly speaking, this is a leak. We never clean up. + // This is because I'm not sure when it's appropriate to clean it up. + // It doesn't seem like popstate is enough because it can still Forward-Back again. + // Maybe we should use sessionStorage. Or check what Next.js is doing? } } // We want to intercept any push/pop/replace *before* the re-render. @@ -36,9 +40,6 @@ export function useWebScrollRestoration() { const screenListeners = useMemo( () => ({ - beforeRemove(e: EventArg<'beforeRemove', boolean | undefined, unknown>) { - state.scrollYs.delete(e.target) - }, focus(e: EventArg<'focus', boolean | undefined, unknown>) { const scrollY = state.scrollYs.get(e.target) ?? 0 window.scrollTo(0, scrollY)