12345678910111213141516171819202122232425262728293031 |
- import {useEffect, useRef} from 'react';
- import {Location} from 'history';
- type Options = {
- location: Location;
- /**
- * Function to stop scrolling from happening if a certan condition is met
- */
- disable?: (location: Location, prevLocation: Location) => boolean;
- };
- /**
- * Automatically scrolls to the top of the page any time the location changes.
- */
- function useScrollToTop({location, disable}: Options) {
- const lastLocation = useRef(location);
- // Check if we should scroll to the top any time the location changes
- useEffect(() => {
- const shouldDisable = disable?.(location, lastLocation.current);
- lastLocation.current = location;
- if (shouldDisable) {
- return;
- }
- window.scrollTo(0, 0);
- }, [location]);
- }
- export default useScrollToTop;
|