Skip to main content
Glama
useScrollPositionPersistence.ts1.09 kB
import { useEffect, useRef } from 'react'; /** * Custom hook to persist scroll position across page navigations * @param storageKey - Unique key to identify the scroll position in sessionStorage * @returns A ref to attach to the scrollable element */ export const useScrollPositionPersistence = <T extends HTMLElement>( storageKey: string ) => { const elementRef = useRef<T>(null); // Restore scroll position on mount useEffect(() => { const savedScrollPosition = sessionStorage.getItem(storageKey); if (savedScrollPosition && elementRef.current) { elementRef.current.scrollTop = parseInt(savedScrollPosition, 10); } }, [storageKey]); // Save scroll position on scroll useEffect(() => { const element = elementRef.current; if (!element) return; const handleScroll = () => { sessionStorage.setItem(storageKey, element.scrollTop.toString()); }; element.addEventListener('scroll', handleScroll, { passive: true }); return () => element.removeEventListener('scroll', handleScroll); }, [storageKey]); return elementRef; };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aymericzip/intlayer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server