diff --git a/web/project-site/src/components/TableOfContents.tsx b/web/project-site/src/components/TableOfContents.tsx index 4cca2e4f..8d854325 100644 --- a/web/project-site/src/components/TableOfContents.tsx +++ b/web/project-site/src/components/TableOfContents.tsx @@ -29,7 +29,8 @@ export function TableOfContents() { }; }); - setHeadings(items); + // Defer the state update to avoid "setState in effect" warning and render cascades + const timeoutId = setTimeout(() => setHeadings(items), 0); const observer = new IntersectionObserver( (entries) => { @@ -44,7 +45,10 @@ export function TableOfContents() { elements.forEach((elem) => observer.observe(elem)); - return () => observer.disconnect(); + return () => { + clearTimeout(timeoutId); + observer.disconnect(); + }; }, [location.pathname]); if (headings.length === 0) return null;