-code: "import { useState, useLayoutEffect } from 'react';\r\n\r\n\/\/ Usage\r\nconst App(){\r\n \/\/ State for our modal\r\n const [modalOpen, setModalOpen] = useState(false);\r\n \r\n return (\r\n <div>\r\n <button onClick={() => setModalOpen(true)}>Show Modal<\/button>\r\n <Content \/>\r\n {modalOpen && (\r\n <Modal\r\n title=\"Try scrolling\"\r\n content=\"I bet you you can't! Muahahaha \uD83D\uDE08\"\r\n onClose={() => setModalOpen(false)}\r\n \/>\r\n )}\r\n <\/div>\r\n );\r\n}\r\n\r\nconst Modal = ({ title, content, onClose }) => {\r\n \/\/ Call hook to lock body scroll\r\n useLockBodyScroll();\r\n\r\n return (\r\n <div className=\"modal-overlay\" onClick={onClose}>\r\n <div className=\"modal\">\r\n <h2>{title}<\/h2>\r\n <p>{content}<\/p>\r\n <\/div>\r\n <\/div>\r\n );\r\n}\r\n\r\n\/\/ Hook\r\nfunction useLockBodyScroll(toggle) {\r\n useLayoutEffect(() => {\r\n \/\/ Prevent scrolling on mount\r\n document.body.style.overflow = 'hidden';\r\n \/\/ Re-enable scrolling when component unmounts\r\n return () => document.body.style.overflow = 'visible';\r\n }, []); \/\/ Empty array ensures effect is only run on mount and unmount\r\n}"
0 commit comments