zfb
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

API リファレンス

確定した zudo-react v1 のエクスポートを六つのパッケージエントリごとに示します。

Core: @takazudo/zfb/zudo-react

コアエントリは記述ヘルパー、リアクティビティ、スコープ、構造を扱う基本機能を提供します。このエントリから使えるのは、ここに示すエクスポートだけです。

Fragment

export const Fragment: unique symbol;

Fragment はホスト要素を増やさずに兄弟の記述をまとめます。コンポーネントと JSXを参照してください。

h

export function h(type: ElementType, props: Record<string, unknown> | null,
  ...children: Child[]): Description;

h は JSX を使わずに検証済みの記述を作ります。コンポーネントと JSXを参照してください。

isDescription

export function isDescription(value: unknown): value is Description;

isDescription はブランド付きの記述形式かを検査します。コンポーネントと JSXを参照してください。

flattenChildren

export function flattenChildren(children: Child): readonly Exclude<Child, readonly Child[] | boolean | null | undefined>[];

flattenChildren はコンポーネントの実行やリアクティブな値の読み取りをせず、対応する子配列を正規化します。コンポーネントと JSXを参照してください。

signal

export function signal<T>(initial: T): Signal<T>;

signal はリアクティブなブランドと必須の writable ブランドを持つ書き込み可能な値を作ります。リアクティビティとフォームを参照してください。

computed

export function computed<T>(read: () => T): ReadonlySignal<T>;

computed は遅延評価される読み取り専用の値を作り、フォームモデルには使えません。リアクティビティを参照してください。

batch

export function batch<T>(fn: () => T): T;

batch はスケジューラーに対する同期的な書き込みをまとめます。リアクティビティを参照してください。

flush

export function flush(): Promise<void>;

flush は現在の DOM と effect のキューが落ち着いた後に解決し、100 パスの上限があります。リアクティビティを参照してください。

getScope

export function getScope(): Scope;

getScope は同期的なセットアップか構造ファクトリの実行中にだけ現在の所有者を返します。スコープとライフサイクルを参照してください。

Show

export function Show(props: ShowProps): Description;

Show は所有スコープを持つ条件領域を作り、各分岐が生きている間にファクトリを実行します。条件分岐とリストを参照してください。

For

export function For<T>(props: ForProps<T>): Description;

For は読み取り専用の item と index の signal を伴う、所有スコープ付きのキー付き項目領域を作ります。条件分岐とリストを参照してください。

Key

export type Key = string | number;

キーには文字列か有限数を使い、負のゼロはゼロに正規化されます。条件分岐とリストを参照してください。

Scalar

export type Scalar = string | number | boolean | null | undefined;

Scalar は記述とリアクティブなテキストで受け付けるプリミティブ値の集合です。コンポーネントと JSXを参照してください。

ReadonlySignal

export interface ReadonlySignal<T> {
  readonly value: T;
  readonly $$zudoReactive: "zudo-react.reactive.v1";
}

ReadonlySignal は読み取り可能なリアクティブな値を表し、writable モデルのブランドを意図的に持ちません。リアクティビティを参照してください。

Signal

export interface Signal<T> extends ReadonlySignal<T> {
  value: T;
  readonly $$zudoWritable: "zudo-react.writable.v1";
}

Signal はすべての model prop に必要な書き込み可能な signal 型です。リアクティビティとフォームを参照してください。

Child

export type Child = Scalar | Description | ReadonlySignal<Scalar> | readonly Child[];

Child はコンポーネントとレンダラーが受け付ける値の再帰的な集合です。コンポーネントと JSXを参照してください。

Component

export type Component<P = Record<string, unknown>> = (props: P) => Child;

Component は props から対応する子の結果を返す同期関数です。概要を参照してください。

ElementType

export type ElementType = string | Component<any> | typeof Fragment;

ElementType には組み込み要素名、関数コンポーネント、Fragment が含まれます。コンポーネントと JSXを参照してください。

Description

export interface Description {
  readonly $$zudo: "zudo-react.description.v1";
  readonly type: ElementType;
  readonly props: Readonly<Record<string, unknown>>;
  readonly key: Key | null;
}

Description はレンダリング間で再利用やコピーができる、ブランド付きの不活性な値です。コンポーネントと JSXを参照してください。

Cleanup

export type Cleanup = () => void;

Cleanup はスコープに登録される同期的なコールバックです。スコープとライフサイクルを参照してください。

Scope

export interface Scope {
  readonly abortSignal: AbortSignal;
  onActivate(fn: () => void | Cleanup): void;
  onCleanup(fn: Cleanup): void;
  effect(fn: () => void | Cleanup): void;
}

Scope は有効化、追跡される effect、クリーンアップ、abort signal を所有します。スコープとライフサイクルを参照してください。

Ref

export interface Ref<T> { current: T | null }

Ref は有効化前に値が入る可変オブジェクトで、コールバック形式はありません。コンポーネントと JSXを参照してください。

Style

export type Style = string | Readonly<Record<string, string | number | null | undefined>>;

Style は CSS 文字列か CSS 表記のキーを持つ平坦なオブジェクトを受け付けます。コンポーネントと JSXを参照してください。

Listener

export type Listener<E extends Event = Event> = (event: E) => void | Promise<void>;

Listener はネイティブイベントを受け取り、on:<name> の表記で登録します。組み込み要素の prop は DOM のイベントマップから Listener<E> の型を決めます。既知の名前には対応するイベント型を使い、currentTarget はその要素の型になります(例: form の on:submit は SubmitEvent と HTMLFormElement)。未知のイベント名やカスタムイベント名には、単一のイベントを受け取る任意のハンドラーを指定できます。コンポーネントと JSXを参照してください。

IslandIdentity

export interface IslandIdentity {
  readonly component: string;
  readonly build: string;
}

IslandIdentity は島をコンポーネント名と不透明なビルド識別子に結び付けます。ハイドレーションを参照してください。

Diagnostic

export interface Diagnostic {
  readonly code: string;
  readonly phase: "setup" | "preflight" | "commit" | "activation" | "update" | "cleanup";
  readonly component: string;
  readonly componentStack: readonly string[];
  readonly path: string;
  readonly expected: string;
  readonly actual: string;
  readonly protocol: string;
  readonly build: string;
}

Diagnostic は props 全体や入力値を含めず、段階、ルートのパス、期待値と実際の値の短い要約を記録します。ハイドレーションを参照してください。

Reporter

export type Reporter = (diagnostic: Diagnostic) => void;

Reporter は構造化されたランタイム診断を一件受け取ります。ハイドレーションを参照してください。

ShowProps

export interface ShowProps {
  when: ReadonlySignal<boolean>;
  children: () => Child;
  fallback?: (() => Child) | undefined;
}

ShowProps には読み取り専用の真偽値 signal と遅延実行される分岐ファクトリが必要です。条件分岐とリストを参照してください。

ForProps

export interface ForProps<T> {
  each: ReadonlySignal<readonly T[]>;
  by: (item: T) => Key;
  children: (item: ReadonlySignal<T>, index: ReadonlySignal<number>) => Child;
}

ForProps は読み取り専用の配列 signal、副作用のないキー選択関数、項目ファクトリを受け付けます。条件分岐とリストを参照してください。

JSX runtime: @takazudo/zfb/zudo-react/jsx-runtime

本番用の自動 JSX 変換は、このサブパスから値と JSX 名前空間をインポートします。

Fragment

export { Fragment } from "./index.js";

JSX ランタイムはコアの Fragment マーカーを再エクスポートします。コンポーネントと JSXを参照してください。

jsx

export function jsx(type: ElementType, props: Record<string, unknown> | null,
  key?: Key | undefined): Description;

jsx は自動 JSX 変換用の不活性な要素記述を一つ作ります。概要を参照してください。

jsxs

export const jsxs: typeof jsx;

jsxs は複数の子に使うヘルパーで、記述のシグネチャーは jsx と同じです。コンポーネントと JSXを参照してください。

JSX

export type { JSX } from "./jsx-types.js";

JSX 名前空間は Element、ElementType、IntrinsicElements、任意の key を持つ IntrinsicAttributes、children を持つ ElementChildrenAttribute をエクスポートします。HTML、SVG、カスタム要素の有限のマップを使い、あらゆる文字列を受けるインデックスはありません。コンポーネントと JSXを参照してください。

JSX development runtime: @takazudo/zfb/zudo-react/jsx-dev-runtime

TypeScript の開発用変換は、このサブパスから診断用ヘルパーをインポートします。

Fragment

export { Fragment } from "./index.js";

開発用 JSX ランタイムは同じコアの Fragment マーカーを再エクスポートします。コンポーネントと JSXを参照してください。

jsxDEV

export function jsxDEV(type: ElementType, props: Record<string, unknown> | null,
  key: Key | undefined, isStaticChildren: boolean,
  source: { fileName: string; lineNumber: number; columnNumber: number } | undefined,
  self: unknown): Description;

jsxDEV は開発用変換のメタデータを受け取りながら、同じ不活性な記述を作ります。概要を参照してください。

JSX

export type { JSX } from "./jsx-types.js";

開発用エントリは、有限の組み込み要素マップを持つ同じ JSX 名前空間を再エクスポートします。コンポーネントと JSXを参照してください。

Server: @takazudo/zfb/zudo-react/server

サーバーエントリはクライアントランタイムのコードをインポートせず、DOM にアクセスせずに文書をレンダリングできます。公開される値は renderToString、islandRoot、serializeProps です。

RenderOptions

export interface RenderOptions {
  island?: IslandIdentity | undefined;
}

RenderOptions に identity を渡すと、独立した島内部のマーカーモードを選びます。サーバーレンダリングを参照してください。

IslandOptions

export interface IslandOptions {
  identity: IslandIdentity;
  when?: "load" | "idle" | "visible" | "media" | undefined;
  media?: string | undefined;
  skipSsr?: boolean | undefined;
  fallback?: Child;
}

IslandOptions はラッパーの識別子、スケジュールモード、省略可能な media クエリー、skip-SSR の fallback を定義します。サーバーレンダリングを参照してください。

renderToString

export function renderToString(node: Child, options?: RenderOptions): string;

renderToString は同期的な記述ツリー全体をエスケープしてシリアライズし、明示的な島ルートの外にはマーカーを付けません。サーバーレンダリングを参照してください。

islandRoot

export function islandRoot(child: Description, options: IslandOptions): Description;

islandRoot は zfb 向けの明示的な島ラッパー記述を作ります。サーバーレンダリングを参照してください。

serializeProps

export function serializeProps(props: Record<string, unknown>): string;

serializeProps は JSON transport のデータを検証し、ラッパー属性用の JSON テキストを返します。値が undefined の、自身が持つ列挙可能な文字列キーのデータプロパティは再帰的に省略されます。明示的な null は保持され、undefined の配列要素と配列の穴は引き続き無効です。サーバーレンダリングを参照してください。

Client: @takazudo/zfb/zudo-react/client

クライアントエントリは DOM のハイドレーション、クライアントレンダリング、島の prop の解析を担当します。

RootOptions

export interface RootOptions {
  identity: IslandIdentity;
  signal?: AbortSignal | undefined;
  report?: Reporter | undefined;
}

RootOptions は識別子、省略可能なキャンセル用 signal、診断レポーターを渡します。ハイドレーションを参照してください。

RootHandle

export interface RootHandle {
  readonly protocol: "zudo-react/1";
  readonly identity: IslandIdentity;
  readonly disposed: boolean;
  dispose(): void;
  unmount(): void;
}

RootHandle はリソースの解放と所有する DOM の削除を分けます。スコープとライフサイクルを参照してください。

hydrate

export function hydrate(node: Child, container: Element, options: RootOptions): RootHandle | null;

hydrate は事前検証後に既存の子ノードを引き継ぎ、想定される失敗では null を返します。ハイドレーションを参照してください。

mount

export function mount(node: Child, container: Element, options: RootOptions): RootHandle | null;

mount は検証済みのラッパー内にクライアント DOM を作り、想定される失敗では null を返します。ハイドレーションを参照してください。

parseProps

export function parseProps(json: string): Record<string, unknown>;

parseProps は厳密な島の props レコードを解析・検証し、不正な入力では名前付きの転送エラーを投げます。ハイドレーションを参照してください。

Testing: @takazudo/zfb/zudo-react/testing

testing エントリは実際のサーバーレンダラーでアイランドを描画し、呼び出し元の document で解析して、有効化、診断、flush、破棄用のヘルパーを提供します。DOM に触れない server エントリとは分かれたテスト環境向けの API です。

createIslandTest

export function createIslandTest<P extends Record<string, unknown>>(
  component: Component<P>,
  props: P,
  options: { document: Document; identity?: IslandIdentity },
): IslandTest;

返された IslandTest はシリアライズ済みの html、解析済みの host、変更可能な identity、診断配列、hydrate()、mount()、flush()、複数回呼べる dispose() を持ちます。テストを参照してください。

withIslandTestContext

export function withIslandTestContext<T>(
  options: { components: Readonly<Record<string, Component<any>>> | readonly Component<any>[]; build?: string },
  callback: () => T,
): T;

withIslandTestContext は同期コールバックの間だけ、SDK の Island 描画に実際のコンポーネント名を渡し、その後、元の globalThis.__zfb メタデータを復元します。非同期コールバックは拒否されます。テストを参照してください。

See also

Revision History

作成更新