useNavigation
이 훅은 페이지 탐색에 대해 알아야 할 모든 것을 알려주어 보류 중인 탐색 표시기와 데이터 변이에 대한 최적화된 UI를 구축할 수 있습니다.
- 글로벌 로딩 표시기
- 변경이 발생하는 동안 양식 비활성화하기
- 제출 버튼에 사용 중 표시기 추가하기
- 서버에서 새 레코드가 생성되는 동안 새 레코드 상태를 낙관적으로 표시하기
- 업데이트되는 동안 레코드의 새 상태를 낙관적으로 표시하기
1. navigation.state
현재 네비게이션 상태를 나타내는 속성입니다.
3가지 상태 값 중 하나를 반환한다
- "idle" - 기본 상태, 현재 네비게이션이 진행되지 않고 있음
- "loading" - 데이터를 불러오는 중이거나 페이지 전환이 진행 중
- "submitting" - 폼 제출과 같은 데이터 변경 작업이 진행 중
보통의 네비게이션이나 get 폼 제출인 경우 flow
idle → loading → idle
POST, PUT, PATCH, or DELETE 을 통한 폼 제출
idle → submitting → loading → idle
활용법
function RootLayout() {
const navigation = useNavigation();
// ... existing code ...
const isLoading = navigation.state === 'loading';
return (
<>
<MainNavigation />
<main>
{isLoading && <p>로딩 중...</p>}
<Outlet />
</main>
</>
);
}
참고 : react router 공식문서
https://reactrouter.com/en/main/hooks/use-navigation#navigationstate
2. navigation.location
- 현재 진행 중인 네비게이션의 대상 위치 정보를 담고 있습니다
- 네비게이션이 진행 중이 아닐 때는 null을 반환합니다
- pathname, search 파라미터 등의 정보를 포함합니다
if (navigation.location) {
console.log('이동할 경로:', navigation.location.pathname);
}
3. navigation.formData
- 제출된 폼 데이터를 FormData 객체로 제공합니다
- 폼 제출이 없을 때는 null을 반환합니다
if (navigation.formData) {
const formValues = Object.fromEntries(navigation.formData);
}
4. navigation.json
- 요청 본문이 JSON 형식일 때 파싱된 데이터를 제공합니다
- JSON 데이터가 없을 때는 null을 반환합니다
5. navigation.text
- 요청 본문의 텍스트 데이터를 제공합니다
- 텍스트 데이터가 없을 때는 null을 반환합니다
6. navigation.formAction
- 현재 제출 중인 폼의 action URL을 나타냅니다
- 폼 제출이 없을 때는 undefined를 반환합니다
7. navigation.formMethod
- 현재 제출 중인 폼의 HTTP 메소드를 나타냅니다 (GET, POST 등)
- 폼 제출이 없을 때는 undefined를 반환합니다
8. navigation.formEncType
- 폼 데이터의 인코딩 타입을 나타냅니다
- 일반적인 값: application/x-www-form-urlencoded, multipart/form-data
- 폼 제출이 없을 때는 undefined를 반환합니다
function RootLayout() {
const navigation = useNavigation();
// 폼 제출 중일 때의 처리
if (navigation.formData) {
console.log('제출된 데이터:', Object.fromEntries(navigation.formData));
console.log('제출 메소드:', navigation.formMethod);
console.log('제출 URL:', navigation.formAction);
}
// 페이지 전환 중일 때의 처리
if (navigation.location) {
console.log('이동 중인 경로:', navigation.location.pathname);
}
return (
// ... 기존 코드 ...
);
}
- 폼 제출 진행 상태 표시
- 페이지 전환 애니메이션 구현
- 데이터 로딩 상태에 따른 UI 처리
- 사용자 입력 유효성 검사
등의 용도로 주로 사용되며 state, location, formData 순으로 주로 사용됩니다
'React' 카테고리의 다른 글
[React] React Router의 useFetcher 훅 - 주요 속성 (0) | 2024.11.13 |
---|---|
[React] React Router의 Form vs useFetcher().Form (0) | 2024.11.13 |
[React] Redux에서 비동기 작업 처리하는 3가지 방법 (0) | 2024.11.10 |
[React] Redux와 Redux Toolkit 비교 및 구현 방법 (0) | 2024.11.08 |
[React] Redux: App-Wide State와 Cross-Component State 관리 가이드 (0) | 2024.11.07 |