Typescript로 햄버거 메뉴 클릭 시 sliding bar를 구현해보았습니다.
🗂 Structure
src
├── components
| └── common
| ├── Header.tsx
| ├── Footer.tsx
| └─── Slidebar.tsx
|
└─── containers
└── common
└───HeaderContainer.tsx
const HeaderContainer = () => {
const [open,setOpen] = useState(false);
const onToggle = () => {
setOpen(!open);
}
return (
<Container>
<Header onClick={onToggle}/>
<Slidebar open={open} onClick={onToggle} />
</Container>
)
}
const Slidebar = ({open,onClick}:ISlide) => {
const ref = useRef<HTMLUListElement>(null);
const onMouseDown = (e:any) => {
if(!ref.current) return ;
if(!e.path.includes(ref.current)) {
onClick();
}
}
useEffect(() => {
if(open) {
window.addEventListener('mousedown', onMouseDown, true);
}
return () => {
window.removeEventListener("mousedown", onMouseDown, true);
}
},[open]);
return (
<>
<UList open={open} ref={ref}>
<Link to="/"><List>Home</List></Link>
<Link to="/"><List>????</List></Link>
<Link to="/"><List>Contact Us</List></Link>
</UList>
</>
)