Redirection et 404 via Response

Un loader peut lever (ou retourner) une Response pour court-circuiter le rendu. Le runtime PRISM détecte cela et transmet la réponse telle quelle — même statut, mêmes en-têtes, même corps. C'est l'équivalent bext de redirect() / notFound() de Remix.

Astuce
Vous pouvez aussi retourner la Response au lieu de la lever — la différence n'est visible que dans votre code TypeScript (throw permet de sortir d'un bloc imbriqué sans return). Les deux chemins sont équivalents côté runtime.

Essayer

  • Rendu normal — le loader retourne { ok: true }.
  • Déclencher un 302 — le loader lève une Response avec status: 302 et un en-tête Location pointant vers la démo server-action-form.
  • Déclencher un 404 — le loader lève une Response avec status: 404 et un corps en texte brut.

Le composant de page n'a pas besoin de connaître tout cela. De son point de vue, seul le chemin de succès est rendu ; le reste est géré avant l'appel de Page().

src/app/examples/redirect-notfound/page.tsxTSX
// src/app/examples/redirect-notfound/page.tsx (loader excerpt)
//
// The PRISM runtime detects a thrown Response and short-circuits the
// page render, forwarding the same status, headers, and body to the
// browser — Remix-style redirect() / notFound().

export async function loader({ request }: LoaderArgs) {
  const url = new URL(request.url);

  if (url.searchParams.get("redirect")) {
    throw new Response(null, {
      status: 302,
      headers: { Location: "/examples/server-action-form" },
    });
  }

  if (url.searchParams.get("missing")) {
    throw new Response("Page not found in our backing store.\n", {
      status: 404,
      headers: { "Content-Type": "text/plain" },
    });
  }

  return { ok: true };
}

export default function Page() {
  return <p>Loaded normally.</p>;
}

Résultat du loader

loader-output.jsonJSON
{
  "ok": true,
  "locale": "fr"
}