프론트엔드 개발자가 될거야./react
로그인페이지에 헤더 안보이게 하기 (with. useLocation)
정니정은니
2023. 2. 4. 15:40
로그인 페이지나 회원가입 페이지에만 헤더를 안보이게 해야하는 경우가 있다.
이미 Router에서 Header가 모든 페이지에 보이게 해두었는데 이런경우에는 어떻게 해야할까?
나는 react-router-dom의 useLocation으로 구현했다.
구현기
1. Router.tsx
function Router() {
return (
<BrowserRouter>
<Header />
<Routes>
<Route path="/home" element={<Home />} />
<Route path="/prac" element={<PracPage />} />
<Route path="/login" element={<LoginPage />} />
</Routes>
</BrowserRouter>
);
}
예를들어 Router의 구조가 이렇게 되어있다고 하자.
Header는 모든 페이지에서 보여질 것이다.
Header.tsx
import React, { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";
function Header() {
const location = useLocation();
const [isLoginPage, setIsLoginPage] = useState(true);
useEffect(() => {
location.pathname === "/login"
? setIsLoginPage(true)
: setIsLoginPage(false);
}, [location.pathname, setIsLoginPage]);
if (isLoginPage) return null;
return (
<NavContainer>
<Nav> .... </Nav>
</NavContainer>
);
}
export default Header;
useState와 useEffect, useLocation으로 구현할 수 있었다.
만약 location.pathname === "/login" 이면 (즉, 로그인페이지면)
Header 컴포넌트는 null로 리턴이될 것이고
로그인페이지가 아니면
Header 컴포넌트는 잘 보여질 것이다 : )