mcpField
C
component-rendering

component-rendering

github.com/tambo-ai開発11.2k97 回インストール3 週間前に更新
リポジトリ

component-rendering について

コンポーネントのプロパティのストリーミングと、セッションをまたぐ状態の保持を扱う Tambo スキルです。生成状況を追跡し、編集可能な UI 状態をサーバーと同期する開発者向けです。

主な機能

  1. 01ストリーム全体の状態追跡
  2. 02プロパティごとの状態追跡
  3. 03コンポーネント状態の永続化
  4. 04状態更新のデバウンス
  5. 05ストリーミング描画の指針

活用シーン

  1. 01生成中のローディング表示
  2. 02未完了のコンポーネントプロパティへの対応
  3. 03編集可能なフォーム入力の保持
  4. 04再読み込み後も AI が参照する UI 状態を維持

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tambo-ai/tambo --skill component-rendering

インストール後、Claude Code で/component-renderingを入力して読み込まれたか確認します。

詳細

コンポーネントのレンダリング

ストリーミング中のプロパティと永続的なコンポーネント状態を処理します。

クイックスタート

const { streamStatus, propStatus } = useTamboStreamStatus<Props>();

if (streamStatus.isPending) return <Skeleton />;
if (streamStatus.isStreaming) return <LoadingIndicator />;

ストリームのステータス

全体およびプロパティごとのストリーミング状態を追跡します。

import { useTamboStreamStatus } from "@tambo-ai/react";

function MyComponent({ title, items }: Props) {
  const { streamStatus, propStatus } = useTamboStreamStatus<Props>();

  // Global status
  if (streamStatus.isPending) return <Skeleton />;
  if (streamStatus.isStreaming) return <LoadingIndicator />;
  if (streamStatus.isError) return <Error message={streamStatus.streamError} />;

  // Per-prop status
  return (
    <h2 className={propStatus.title?.isStreaming ? "animate-pulse" : ""}>
      {title}
    </h2>
  );
}
StreamStatus のプロパティ
プロパティ説明
isPendingまだトークンを受信していません
isStreamingストリーミング中です
isSuccessすべてのプロパティがエラーなく完了しました
isError致命的なエラーが発生しました
streamError失敗した場合のエラーオブジェクト
PropStatus(プロパティごと)
プロパティ説明
isPendingこのプロパティのトークンをまだ受信していません
isStreamingプロパティに部分的なコンテンツがあります
isSuccessプロパティのストリーミングが完了しました
errorこのプロパティのエラー(ある場合)

コンポーネントの状態

AI が状態を確認できるようにし、セッションをまたいで保持します。

import { useTamboComponentState, useTamboStreamStatus } from "@tambo-ai/react";

function EditableCard({ title: streamedTitle }: { title?: string }) {
  const [title, setTitle, { isPending, flush }] = useTamboComponentState(
    "title",
    "",
  );
  const { streamStatus } = useTamboStreamStatus();

  return (
    <input
      value={title}
      onChange={(e) => setTitle(e.target.value)}
      disabled={streamStatus.isStreaming || isPending}
    />
  );
}
useTamboComponentState API
const [value, setValue, meta] = useTamboComponentState(
  key, // Unique state key within the component
  initialValue, // Initial value if no server state
  debounceTime, // Debounce ms (default: 500)
);
戻り値説明
value現在の状態値
setValue状態を更新します(更新関数にも対応)
meta.isPendingサーバーとの同期中
meta.error同期エラー(ある場合)
meta.flush保留中のデバウンスされた更新を直ちに反映します
setValue のパターン
// Direct value
setTitle("New title");

// Updater function
setCount((prev) => prev + 1);
コンポーネントの状態を使用する場面
  • AI に把握させる、ユーザーが編集できるコンテンツ
  • 永続化が必要なフォーム入力
  • ページを再読み込みしても保持される状態
  • 生成後にユーザーが変更できるストリーミング中のプロパティ

ストリーミングのベストプラクティス

  1. Zod スキーマでプロパティを省略可能にする:

    z.object({
      title: z.string().optional().describe("Card title"),
      items: z.array(z.string()).optional(),
    });
    
  2. データがない場合はエラーではなく、スケルトンを表示する

  3. オプショナルチェーンを使用する:items?.map(...)

  4. streamStatus.isSuccess になるまで、操作を無効にする

コメント