defer

ストリーミングデータの利用を開始するには、ストリーミングガイドを参照してください。

これは、ストリーミング/遅延レスポンスを作成するためのショートカットです。utf-8エンコーディングを使用していることを前提としています。開発者の視点からは、json()とまったく同じように動作しますが、PromiseをUIコンポーネントに転送する機能が追加されています。

import { defer } from "@remix-run/node"; // または cloudflare/deno
 
export const loader = async () => {
  const aStillRunningPromise = loadSlowDataAsync();
 
  // Promiseをawaitせずにこのように書くことができます。
  return defer({
    critical: "data",
    slowPromise: aStillRunningPromise,
  });
};

ステータスコードとヘッダーを渡すこともできます。

export const loader = async () => {
  const aStillRunningPromise = loadSlowDataAsync();
 
  return defer(
    {
      critical: "data",
      slowPromise: aStillRunningPromise,
    },
    {
      status: 418,
      headers: {
        "Cache-Control": "no-store",
      },
    }
  );
};