{}const=>[]async()letfn</>var
開発

React Router 7.9:痛みのないミドルウェア

ログイン認証とデータのプリロードを、不正解な方法を使わずにルートに組み込む方法。React Router 7.9の新しいレベルの利便性!

К

Kodik

著者

2分で読める

React Router は、React の世界ではルーティングの標準となってから長い年月が経ちました。しかし、バージョン 7.9 多くの人が長年待ち望んでいたものをもたらしました。 Middleware APIこれで、アクセスチェック、データのプリロード、その他の「レイヤー」を、余分なコストなしでルートに直接組み込むことができます。

React Routerのミドルウェアとは何ですか?

以前は useEffect やコンテキストを構築したり、ルートをHOCでラップしたりする必要がありましたが、現在はすべてがエレガントに解決されます。

  • アクセスチェック(ユーザーの役割など)

  • リダイレクト(認証されていない場合はログインページにリダイレクトされます)

  • ページのレンダリング前のデータの読み込み

  • ログとメトリクス

ミドルウェアは実行される機能です コンポーネントのレンダリング前、移動を許可するか変更することができます。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

例:認証の確認


import { createBrowserRouter, RouterProvider } from "react-router";
import App from "./App";
import Dashboard from "./pages/Dashboard";
import Login from "./pages/Login";

const requireAuth = async ({ context, next }) => {
  if (!context.user) {
    return Response.redirect("/login");
  }
  return next();
};

const router = createBrowserRouter([
  {
    path: "/",
    element: <App />,
    children: [
      {
        path: "dashboard",
        element: <Dashboard />,
        middleware: [requireAuth]
      },
      {
        path: "login",
        element: <Login />
      }
    ]
  }
]);

export default function Root() {
  return <RouterProvider router={router} />;
}
  

ルート保護はルーター自体に組み込まれているため、自転車を囲む必要はありません。

レンダリング前のデータのプリロード


const preloadUser = async ({ next }) => {
  const user = await fetch("/api/me").then(r => r.json());
  return next({ context: { user } });
};

const router = createBrowserRouter([
  {
    path: "/profile",
    element: <Profile />,
    middleware: [preloadUser]
  }
]);
  

これで、コンポーネント Profile のデータは、「読み込み中...」の点滅なしですぐに利用できるようになります。

従来のアプローチとの比較

1. HOC (Higher-Order Components)


function withAuth(Component) {
  return function Wrapped(props) {
    const user = useUser();
    if (!user) return <Navigate to="/login" />;
    return <Component {...props} />;
  }
}
  

❌ 短所:コードの重複、データフローの管理が難しい、コンポーネントのネストが増える。

2. useEffect + Navigate


function Dashboard() {
  const user = useUser();
  const navigate = useNavigate();

  useEffect(() => {
    if (!user) navigate("/login");
  }, [user]);

  return <div>Dashboard</div>;
}
  

❌ 短所:最初にコンポーネントがマウントされ、次にリダイレクトが行われます。ユーザーには「点滅」が表示されます。

3. ミドルウェアAPI(新しいアプローチ)

✅ すべてがルートに含まれており、「点滅」なしで、読み取り可能で一元化されたコード。

なぜ素晴らしいのでしょうか?

  • よりクリーンなコード — ルートはアクセスと読み込みのロジックの単一ポイントになります。

  • より速いUX — レンダリング前のデータのプリロード。

  • 柔軟性 — あらゆるニーズ(ロギング、分析、フィーチャーフラグ)に合わせて独自のミドルウェアを書くことができます。

しかし! ミドルウェアは非同期で動作するため、チェックが多い場合はパフォーマンスを考慮し、結果をキャッシュすることをお勧めします。

React Router 7.9は、期待通りの結果をもたらしました。ルーティングを アクセスとデータの中央管理場所。ミドルウェアAPIは、より予測可能で正確なアプリケーションへの道を開きます。

B コディケ 私たちはプログラミングの学習をシンプルでわかりやすくします。Go、JavaScript、Python、その他のテクノロジーのコースをすべて1つのアプリケーションで提供します。

そして、私たちは居心地の良い テレグラムチャンネル開発の世界からの最新ニュースを話し合い、洞察を共有し、新機能を一緒に分析します。 参加する、志を同じくする人々と一緒にITを学び、成長するために!

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要