--- title: React useBodyScrollLock hook tags: hooks,effect expertise: intermediate author: chalarangelo cover: blog_images/folded-map.jpg firstSeen: 2021-09-02T05:00:00-04:00 --- Enables body scroll locking. - Use the `useLayoutEffect()` with an empty array as the second argument to execute the provided callback only once when the component is mounted. - Use `Window.getComputedStyle()` to get the `overflow` value of the `body` element and store it in a variable. - Replace the `overflow` value of the `body` element with `'hidden'` and restore it to its original value when unmounting. ```jsx const useBodyScrollLock = () => { React.useLayoutEffect(() => { const originalStyle = window.getComputedStyle(document.body).overflow; document.body.style.overflow = 'hidden'; return () => (document.body.style.overflow = originalStyle); }, []); }; ``` ```jsx const Modal = ({ onClose }) => { useBodyScrollLock(); return (
Scroll locked!
Click me to unlock