728x90
728x90
useFetcher 훅 (React Router)
들어가묘
- 리액트 라우터(React Router)에서 제공하는 @useFetcher()@ 훅에 대해 정리해본다.
useFetcher
개념
- 리액트 라우터(React Router)에서 페이지 전환 없이 데이터 로딩이나 액션을 처리할 수 있게 도와주는 훅(Hook)
- 주로 폼 제출이나 데이터 페칭을 백그라운드에서 처리하고, 사용자에게 시각적 전환 없이 결과를 보여줘야 하는 경우에 사용하면 유용하다.
주요 기능
- 데이터 로딩 및 액션 트리거
- 로딩 상태를 관리하고, 데이터를 비동기적으로 가져오거나 서버에 데이터를 제출할 수 있다.
- 페이지 전환 없음.
- 페이지 전환 없이 데이터를 가져오거나 제출할 수 있으므로, 사용자 경험이 보다 매끄럽다.
- 상태 관리
- 현재 로딩 상태와 로딩 완료 후 데이터를 관리할 수 있다.
사용 방법
- @useFetcher@는 React Router의 @react-router-dom@ 패키지에서 제공된다.
import { useFetcher } from 'react-router-dom';
function NewsletterSignup() {
const fetcher = useFetcher();
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData(event.target);
fetcher.submit(formData, { method: 'post', action: '/newsletter' });
};
return (
<fetcher.Form method="post" action="/newsletter" onSubmit={handleSubmit}>
<input type="email" name="email" required />
<button type="submit">Sign Up</button>
</fetcher.Form>
);
}
주요 속성 및 메서드 | 설명 |
@fetcher.Form@ | - 기존의 HTML form 태그와 유사하게 사용되지만, 이 방법으로 데이터를 제출하면 페이지 전환 없이 지정된 액션을 트리거한다. |
@fetcher.submit@ | - 폼을 사용하지 않고도 프로그래매틱하게 데이터를 제출할 수 있는 함수 - 데이터와 메서드, 액션을 지정하여 호출한다. |
@fetcher.data@ | - 로딩이 완료된 후 서버로부터 반환된 데이터를 포함한다. |
@fetcher.state@ | - 현재 로딩 상태 - @idle@, @loading@, @submitting@ 중 하나의 값을 가진다. |
사용 예제
예제
- @useFetcher@를 사용하여 폼 제출 시 데이터를 서버로 보내고, 서버 응답을 받아 처리하는 예제
import { useFetcher } from 'react-router-dom';
import classes from './NewsletterSignup.module.css';
import { useEffect } from 'react';
function NewsletterSignup() {
const fetcher = useFetcher();
const { data, state } = fetcher;
useEffect(() => {
if (state === 'idle' && data && data.message) {
window.alert(data.message);
}
}, [data, state]);
return (
<fetcher.Form
method="post"
action="/newsletter"
className={classes.newsletter}
>
<input
type="email"
placeholder="Sign up for newsletter..."
aria-label="Sign up for newsletter"
/>
<button>Sign up</button>
</fetcher.Form>
);
}
export default NewsletterSignup;
정리
- @useFetcher@를 이용하여 페이지 전환 없이 데이터를 가져오거나 제공할 수 있다.
참고 사이트
728x90
728x90
'Programming > React' 카테고리의 다른 글
[React.js] 리액트 쿼리(Tanstack Query, React Query) (0) | 2024.07.09 |
---|---|
[React.js] 지연 로딩(Lazy Loading) (0) | 2024.07.08 |
[React.js] useSearchParams 훅 (React Router) (0) | 2024.07.08 |
[React.js] defer() (React Router) (0) | 2024.07.07 |
[React.js] json() 유틸리티 함수 (React Router) (0) | 2024.07.05 |
[React.js] useRouterError 훅 (React Router) (0) | 2024.07.05 |
[React.js] React Router의 loader 속성 (0) | 2024.07.03 |
[React.js] 라우터 설정 방법 (React Router) (0) | 2024.07.02 |