smolter
Types

DataArgs

Every loader and action receives the Request, decoded params, and an AbortSignal.

Compatibility

ReactAvailable in this renderer's browser integration.
React SSRAvailable to this renderer's SSR integration; browser event handlers run after hydration.
PreactAvailable in this renderer's browser integration.
Preact SSRAvailable to this renderer's SSR integration; browser event handlers run after hydration.

Import from @kasperrt/smolter/react @kasperrt/smolter/preact

Signature

interface DataArgs {
  /** Why this handler ran; independent of when browser history is committed. */
  reason?:
    | "initial"
    | "navigation"
    | "revalidation"
    | "fetcher"
    | "action"
    | "prefetch";
  request: Request;
  params: Params;
  signal: AbortSignal;
}

Usage

Every loader and action receives the Request, decoded params, and an AbortSignal. Use request.url for query parameters and request.formData() for mutations. Forward signal to cancellable work.

export async function loader({ request, params, signal }: DataArgs) {
  return fetch(`/api/tasks/${params.id}`, { signal });
}

Handler reason

The router supplies reason: initial, navigation, revalidation, fetcher or action. Use it to choose paginated navigation reads versus refresh behavior; browser history may already reflect the destination when a loader runs. Direct HTTP dispatch may omit this optional field.

export async function clientLoader({ reason, signal }: DataArgs) {
  const limit = reason === "navigation" || reason === "initial" ? 12 : undefined;

  return loadItems({ limit, signal });
}

Fields

reason

reason?:
    | "initial"
    | "navigation"
    | "revalidation"
    | "fetcher"
    | "action"
    | "prefetch";

Why this handler ran; independent of when browser history is committed.

request

request: Request;

params

params: Params;

signal

signal: AbortSignal;
View implementation ↗