TIL
24. 07. 04 TIL
효ㄷi
2024. 7. 4. 20:59
리액트 라우터 돔 복습, 모달 만들기!
오늘은 리액트 라우터 복습 강의, 모달 만들기 강의를 듣고 라이브 코딩을 했다
좀 헷갈리긴 했는데 어쨌든 끝냈다!
일단 페이지 3개, 모달을 2개 만든다.
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/user" element={<UserPage />} />
<Route path="/auth" element={<AuthPage />} />
<Route path="/user/:id" element={<UserModal />} />
</Routes>
리액트 라우터 돔을 설치하고, Routes에 Route를 만들어 저렇게 페이지를 연결해준다.
그리고 배웠던 게 페이지 모달, 스위치 모달이었는데
페이지 모달은 저렇게 페이지를 연결해서 불러오는 것이고, 스위치 모달은 원래 알던 방식으로 useState를 이용해 모달을 띄우는 방법이었다.
페이지 모달은 userModal로
<div>UserPage</div>
<button onClick={() => Navigate('/')}>home</button>
<button
onClick={() => {
Navigate(`${data.id}`);
}}
>
UserModal
</button>
<Outlet />
유저 페이지에서 이렇게 불러와서 쓴다.
여기서 outlet을 넣어주는데 사실 안 넣어도 잘 뜨긴 하는데...
outlet을 사용하면 중첩된 라우트 구조를 쉽게 관리하고 확장할 수 있다...
고 한다. 잘 모르겠으니 나중에 좀 더 정리를 해봐야할 것 같긴 하다.
const UserModal = () => {
const { id } = useParams();
const Navigate = useNavigate();
return (
<>
<StBack />
<StContent>
<div>userId: {id}</div>
<button onClick={() => Navigate(-1)}>닫기</button>
</StContent>
</>
);
};
그리고 userMoal은 이렇게 해서 id를 띄워주고,
data는
const data = {
id: 234,
};
userPage 상단에 이렇게 넣어줬다.
auth 페이지는 스위치 모달을 띄워야 하는데,
const AuthPage = () => {
const [modalOpen, setModalOpen] = useState(false);
const Navigate = useNavigate();
return (
<>
<div>AuthPage</div>
<button onClick={() => Navigate('/')}>home</button>
<button
onClick={() => {
setModalOpen(true);
}}
>
AuthModal
</button>
{modalOpen && <AuthModal setModalOpen={setModalOpen} />}
</>
);
};
이렇게 useState로 관리해주면 된다.
기본은 false로, 모달 버튼을 클릭하면 true로 바꿔주면서 띄워주고
이 모달은 modalOpen이 true일 때만 뜨도록 해준다.
그리고 setModalOpen은 프롭스로 내려준다.
const AuthModal = ({ setModalOpen }) => {
return (
<>
<StBack onClick={() => setModalOpen(false)} />
<StContent>
<div>login</div>
<button onClick={() => setModalOpen(false)}>닫기</button>
</StContent>
</>
);
그리고 authModal에서 setModalOpen을 받아서
닫기 버튼을 클릭하면 false로 바뀌도록 해준다.