component-rendering について
コンポーネントのプロパティのストリーミングと、セッションをまたぐ状態の保持を扱う Tambo スキルです。生成状況を追跡し、編集可能な UI 状態をサーバーと同期する開発者向けです。
主な機能
- 01ストリーム全体の状態追跡
- 02プロパティごとの状態追跡
- 03コンポーネント状態の永続化
- 04状態更新のデバウンス
- 05ストリーミング描画の指針
活用シーン
- 01生成中のローディング表示
- 02未完了のコンポーネントプロパティへの対応
- 03編集可能なフォーム入力の保持
- 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 に把握させる、ユーザーが編集できるコンテンツ
- 永続化が必要なフォーム入力
- ページを再読み込みしても保持される状態
- 生成後にユーザーが変更できるストリーミング中のプロパティ
ストリーミングのベストプラクティス
-
Zod スキーマでプロパティを省略可能にする:
z.object({ title: z.string().optional().describe("Card title"), items: z.array(z.string()).optional(), }); -
データがない場合はエラーではなく、スケルトンを表示する
-
オプショナルチェーンを使用する:
items?.map(...) -
streamStatus.isSuccessになるまで、操作を無効にする
コメント
Markdown 対応