React Router v7에서 useLoaderData()처럼 자주 사용되는 핵심 훅들을 정리해줄게.
각 훅의 역할과 동작 방식을 알면, Remix 스타일의 개발을 훨씬 더 쉽게 할 수 있어. 🚀
1️⃣ useLoaderData() – 데이터 로딩
loader()에서 반환한 데이터를 가져오는 훅
🔹 언제 사용? 페이지가 렌더링되기 전에 데이터를 불러와야 할 때
📄 사용 예시
📌 📌 정리
✅ 페이지가 처음 로드될 때 데이터를 미리 불러오는 데 사용됨
✅ 깜빡임 없이 데이터를 빠르게 표시할 수 있음
✅ 서버에서 데이터를 가져오고 클라이언트에서 직접 사용 가능
2️⃣ useNavigate() – 프로그래밍 방식으로 페이지 이동
Link 태그 없이 JavaScript 코드로 페이지 이동할 때 사용
🔹 언제 사용? 버튼 클릭 시 특정 페이지로 이동하고 싶을 때
📄 사용 예시
📌 📌 정리
✅ navigate(URL)을 호출하면 즉시 이동 가능
✅ 뒤로 가기(navigate(-1))와 앞으로 가기(navigate(1))도 가능
✅ 폼 제출 후 특정 페이지로 이동할 때 유용함
3️⃣ useParams() – 동적 URL 파라미터 가져오기
URL에서 동적으로 변하는 값을 가져올 때 사용
🔹 언제 사용? /user/:id 같은 라우트에서 id 값을 가져올 때
📄 라우트 설정
📄 사용 예시
📌 📌 정리
✅ URL의 특정 부분을 변수처럼 사용할 수 있음
✅ API 요청 시 유저 ID, 게시물 ID 등을 전달할 때 유용함
✅ useLoaderData()와 함께 사용하면 데이터 로딩을 동적으로 처리 가능
4️⃣ useSearchParams() – URL 쿼리 스트링 관리
?key=value 형태의 쿼리 스트링 값을 가져오거나 변경할 때 사용
🔹 언제 사용? 필터, 검색, 정렬 같은 기능을 만들 때
📄 사용 예시
📌 📌 정리
✅ 검색 필터, 페이지네이션, 정렬 등에 유용함
✅ setSearchParams()를 사용하면 쿼리스트링을 변경 가능
✅ URL이 바뀌어도 상태가 유지됨
5️⃣ useActionData() – 폼 제출 후 응답 데이터 가져오기
action() 함수에서 반환된 데이터를 가져오는 훅
🔹 언제 사용? 폼 제출 후 서버에서 응답 데이터를 받아 처리할 때
📄 폼 액션 설정
📄 사용 예시
📌 📌 정리
✅ 폼 데이터를 서버에서 처리한 후 결과를 받아올 수 있음
✅ useLoaderData()와 차이점 → useLoaderData()는 페이지 로드 시, useActionData()는 폼 제출 후 사용
✅ API 요청을 따로 만들 필요 없이, 바로 서버와 연동 가능
6️⃣ useRouteError() – 에러 처리
특정 라우트에서 발생한 오류를 감지하여 보여줌
🔹 언제 사용? 데이터 로딩 또는 액션 실행 중 발생한 에러를 처리할 때
📄 라우트 설정
📄 에러 처리 컴포넌트
📌 📌 정리
✅ 라우터에서 발생한 에러를 감지하여 사용자에게 표시 가능
✅ API 요청 실패, 페이지 로딩 오류 등을 다룰 때 유용함
✅ 각 라우트마다 개별적인 에러 처리가 가능
🎯 정리 – 필수로 알아야 할 React Router v7 훅
훅 이름역할사용 예시
useLoaderData() | loader()에서 받은 데이터 사용 | 데이터 로딩 |
useNavigate() | 프로그래밍 방식으로 페이지 이동 | 버튼 클릭 시 이동 |
useParams() | 동적 URL 값 가져오기 | /user/:id 처리 |
useSearchParams() | 쿼리 스트링 값 읽기 & 설정 | 검색, 필터, 정렬 |
useActionData() | action() 실행 후 결과 가져오기 | 폼 제출 후 응답 |
useRouteError() | 라우트에서 발생한 오류 가져오기 | 에러 페이지 처리 |
🚀 결론
- useLoaderData() → 데이터 로딩
- useNavigate() → 페이지 이동
- useParams() → 동적 URL 값 가져오기
- useSearchParams() → 검색 및 필터링
- useActionData() → 폼 액션 후 결과 가져오기
- useRouteError() → 에러 처
'Web' 카테고리의 다른 글
[Vue3] Composition API (0) | 2022.02.19 |
---|---|
[Vue3] <script setup> (0) | 2022.02.19 |
# Polyfill(폴리필) / Transpiler(트랜스파일러) (0) | 2017.11.14 |
[Web]# 크로스 도메인 / 동일 출처 정책 : CORS, SOP (0) | 2017.10.14 |