React Router v6.19+

moon.kick·2025년 4월 16일

오! 너 진짜 잘 캐치했어 😎
React Router v6에 이어서, 지금 말한 React Router v6.19 (또는 6.20) 쯤에서
🚀 새로운 기능들이 꽤 크게 나왔어.

이제는 SPA를 넘어서 SSR, 데이터 로딩, 폼 처리까지
React Router가 진짜 프레임워크처럼 진화했어.


🆕 React Router v6.19+ 핵심 요약

기능설명
🔄 Loader / Action API 강화데이터 가져오기 + 폼 처리 로직 분리 가능
🗂️ File-based Routing (Remix 스타일)구조만으로 자동 라우팅 가능
📥 Deferred Loading (지연 로딩)부분 데이터만 먼저 보여주고, 나머지는 나중에
🧪 useFetcher() / useSubmit()비동기 폼 처리와 UI 상태 분리
💣 ErrorElement각 라우트마다 에러 처리 컴포넌트 지정 가능
Form 컴포넌트 지원HTML <form>처럼 사용 가능, 액션 함수와 연동

📦 예제 중심으로 이해해보자


🔹 1. loader – 페이지 들어오기 전에 데이터 불러오기

export const loader = async ({ params }) => {
  return fetch(`/api/user/${params.userId}`);
};

<Route path="user/:userId" element={<User />} loader={loader} />
  • 🔁 자동으로 데이터 pre-fetch
  • useLoaderData()로 받음

🔹 2. action – form 제출 처리 담당

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 없이 처리 가능
  • 결과에 따라 redirect도 가능

🔹 3. <Form> – 자동으로 action 호출

import { Form } from "react-router-dom";

<Form method="post">
  <input name="username" />
  <button type="submit">Login</button>
</Form>
  • Form 자체가 리액트용 HTML <form>이라고 보면 됨
  • 제출 시, action에 정의된 함수 호출됨

🔹 4. useFetcher – 페이지 이동 없이 submit 처리 가능

const fetcher = useFetcher();

<fetcher.Form method="post" action="/add">
  <input name="item" />
  <button type="submit">추가</button>
</fetcher.Form>
  • ⚡ 페이지 새로고침 없이 백그라운드로 동작
  • 리스트 추가/삭제 등에서 유용

🔹 5. ErrorElement – 에러 핸들링

<Route
  path="/profile"
  element={<Profile />}
  errorElement={<ErrorPage />} // 이 라우트만 에러처리
/>

🧠 진짜 핵심 포인트 요약

기술너가 기억할 거
loader미리 데이터 가져오기 (SSR처럼도 가능)
actionform 처리 로직 (로그인, 등록 등)
FormJSX용 <form>, 자동 action 연동
fetcher페이지 이동 없이 요청 (AJAX 느낌)
ErrorElement라우트 단위 에러 컴포넌트 지정
deferred일부 데이터만 먼저 보여주기 (속도↑)

✨ React Router가 더 이상 "그냥 라우터"가 아냐!

이제는:

  • ✅ 데이터 로딩 (loader)
  • ✅ 폼 제출 처리 (action)
  • ✅ 뷰 상태 관리 (fetcher)
  • ✅ 에러 처리까지 라우트에 포함

즉, "풀스택 라우터"처럼 진화했어.
Remix에서 가져온 아이디어들로, 리액트만으로도 Next.js 같은 SPA/SSR 느낌 구현 가능해.


궁금한 부분 골라서 예제 더 보여줄까?

  • loader + fetcher 같이 쓰는 실전 CRUD 예시?
  • Form + action으로 로그인 처리?
  • 라우트 기반 로그인 보호 (requireAuth 패턴)?

계속 반복해서 정리해줄게 🧠💪

profile
@mgkick

0개의 댓글