오! 너 진짜 잘 캐치했어 😎
React Router v6에 이어서, 지금 말한 React Router v6.19 (또는 6.20) 쯤에서
🚀 새로운 기능들이 꽤 크게 나왔어.
이제는 SPA를 넘어서 SSR, 데이터 로딩, 폼 처리까지
React Router가 진짜 프레임워크처럼 진화했어.
| 기능 | 설명 |
|---|---|
| 🔄 Loader / Action API 강화 | 데이터 가져오기 + 폼 처리 로직 분리 가능 |
| 🗂️ File-based Routing (Remix 스타일) | 구조만으로 자동 라우팅 가능 |
| 📥 Deferred Loading (지연 로딩) | 부분 데이터만 먼저 보여주고, 나머지는 나중에 |
| 🧪 useFetcher() / useSubmit() | 비동기 폼 처리와 UI 상태 분리 |
| 💣 ErrorElement | 각 라우트마다 에러 처리 컴포넌트 지정 가능 |
| ✅ Form 컴포넌트 지원 | HTML <form>처럼 사용 가능, 액션 함수와 연동 |
export const loader = async ({ params }) => {
return fetch(`/api/user/${params.userId}`);
};
<Route path="user/:userId" element={<User />} loader={loader} />
useLoaderData()로 받음export const action = async ({ request }) => {
const formData = await request.formData();
await fetch("/api/login", {
method: "POST",
body: formData,
});
return redirect("/dashboard");
};
<Route path="/login" element={<LoginForm />} action={action} />
onSubmit 없이 처리 가능<Form> – 자동으로 action 호출import { Form } from "react-router-dom";
<Form method="post">
<input name="username" />
<button type="submit">Login</button>
</Form>
Form 자체가 리액트용 HTML <form>이라고 보면 됨const fetcher = useFetcher();
<fetcher.Form method="post" action="/add">
<input name="item" />
<button type="submit">추가</button>
</fetcher.Form>
<Route
path="/profile"
element={<Profile />}
errorElement={<ErrorPage />} // 이 라우트만 에러처리
/>
| 기술 | 너가 기억할 거 |
|---|---|
| loader | 미리 데이터 가져오기 (SSR처럼도 가능) |
| action | form 처리 로직 (로그인, 등록 등) |
| Form | JSX용 <form>, 자동 action 연동 |
| fetcher | 페이지 이동 없이 요청 (AJAX 느낌) |
| ErrorElement | 라우트 단위 에러 컴포넌트 지정 |
| deferred | 일부 데이터만 먼저 보여주기 (속도↑) |
이제는:
즉, "풀스택 라우터"처럼 진화했어.
Remix에서 가져온 아이디어들로, 리액트만으로도 Next.js 같은 SPA/SSR 느낌 구현 가능해.
궁금한 부분 골라서 예제 더 보여줄까?
loader + fetcher 같이 쓰는 실전 CRUD 예시?Form + action으로 로그인 처리?requireAuth 패턴)?계속 반복해서 정리해줄게 🧠💪