react-native
json-renderのReact Nativeレンダラーで、JSON仕様をネイティブモバイルUIに変換します。`@json-render/react-native`を使用する際や、JSONからReact Native UIを構築する場合、モバイル向けコンポーネントカタログの作成、またはAI生成仕様をモバイルでレンダリングする際に活用してください。
description の原文を見る
React Native renderer for json-render that turns JSON specs into native mobile UIs. Use when working with @json-render/react-native, building React Native UIs from JSON, creating mobile component catalogs, or rendering AI-generated specs on mobile.
SKILL.md 本文
@json-render/react-native
JSONスペックをネイティブモバイルコンポーネントツリーに変換するReact Nativeレンダラー。標準コンポーネント、データバインディング、表示条件、アクション、および動的プロップをサポートしています。
クイックスタート
import { defineCatalog } from "@json-render/core";
import { schema } from "@json-render/react-native/schema";
import {
standardComponentDefinitions,
standardActionDefinitions,
} from "@json-render/react-native/catalog";
import { defineRegistry, Renderer, type Components } from "@json-render/react-native";
import { z } from "zod";
// Create catalog with standard + custom components
const catalog = defineCatalog(schema, {
components: {
...standardComponentDefinitions,
Icon: {
props: z.object({ name: z.string(), size: z.number().nullable(), color: z.string().nullable() }),
slots: [],
description: "Icon display",
},
},
actions: standardActionDefinitions,
});
// Register only custom components (standard ones are built-in)
const { registry } = defineRegistry(catalog, {
components: {
Icon: ({ props }) => <Ionicons name={props.name} size={props.size ?? 24} />,
} as Components<typeof catalog>,
});
// Render
function App({ spec }) {
return (
<StateProvider initialState={{}}>
<VisibilityProvider>
<ActionProvider handlers={{}}>
<Renderer spec={spec} registry={registry} />
</ActionProvider>
</VisibilityProvider>
</StateProvider>
);
}
標準コンポーネント
レイアウト
Container- パディング、背景色、角丸を持つラッパーRow- ギャップとアライメントを備えた水平フレックスレイアウトColumn- ギャップとアライメントを備えた垂直フレックスレイアウトScrollContainer- スクロール可能な領域(垂直または水平)SafeArea- ノッチやホームインジケーター用のセーフエリアインセットPressable- タップ時にアクションをトリガーするタッチ可能なラッパーSpacer- 固定またはフレキシブルなスペーシングDivider- 薄い線の区切り
コンテンツ
Heading- 見出しテキスト(レベル1~6)Paragraph- 本文テキストLabel- 小さなラベルテキストImage- サイジングモード付きの画像表示Avatar- 円形のアバター画像Badge- 小さなステータスバッジChip- カテゴリ用のタグ/チップ
入力
Button- バリアント付きの押下可能なボタンTextInput- テキスト入力フィールドSwitch- トグルスイッチCheckbox- ラベル付きのチェックボックスSlider- 範囲スライダーSearchBar- 検索入力
フィードバック
Spinner- ローディングインジケーターProgressBar- プログレスインジケーター
複合
Card- 任意のヘッダー付きカードコンテナListItem- タイトル、サブタイトル、アクセサリー付きのリスト行Modal- ボトムシートモーダル
表示条件
要素に visible を使用します。構文: { "$state": "/path" }、{ "$state": "/path", "eq": value }、{ "$state": "/path", "not": true }、AND条件の場合は [ cond1, cond2 ]。
Pressable + setState パターン
タブバーのようなインタラクティブなUIに対して、組み込みの setState アクションで Pressable を使用します:
{
"type": "Pressable",
"props": {
"action": "setState",
"actionParams": { "statePath": "/activeTab", "value": "home" }
},
"children": ["home-icon", "home-label"]
}
動的プロップ式
任意のプロップ値は、レンダリング時に解決されるデータドリブンな式にできます:
{ "$state": "/state/key" }- ステートモデルから読み込み(一方向読み込み){ "$bindState": "/path" }- 双方向バインディング: フォームコンポーネントの自然な値プロップ(value、checked、pressed等)に使用{ "$bindItem": "field" }- 繰り返しアイテムフィールドへの双方向バインディング。繰り返しスコープ内で使用{ "$cond": <condition>, "$then": <value>, "$else": <value> }- 条件付き値
{
"type": "TextInput",
"props": {
"value": { "$bindState": "/form/email" },
"placeholder": "Email"
}
}
コンポーネントは双方向バインディングに statePath プロップを使用しません。代わりに、自然な値プロップに { "$bindState": "/path" } を使用してください。
組み込みアクション
setState アクションは ActionProvider によって自動的に処理され、ステートモデルを直接更新します。これにより表示条件と動的プロップ式が再評価されます:
{ "action": "setState", "actionParams": { "statePath": "/activeTab", "value": "home" } }
プロバイダー
| プロバイダー | 用途 |
|---|---|
StateProvider | コンポーネント間でステートを共有(JSON Pointerパス)。制御モード用の任意の store プロップを受け付け |
ActionProvider | コンポーネントからディスパッチされたアクションを処理 |
VisibilityProvider | ステートに基づいた条件付きレンダリングを有効化 |
ValidationProvider | フォームフィールド検証 |
外部ストア(制御モード)
StateProvider(または JSONUIProvider / createRenderer)に StateStore を渡して、外部のステート管理を使用します:
import { createStateStore, type StateStore } from "@json-render/react-native";
const store = createStateStore({ count: 0 });
<StateProvider store={store}>{children}</StateProvider>
store.set("/count", 1); // React は自動的に再レンダリング
store が提供されている場合、initialState と onStateChange は無視されます。
主要なエクスポート
| エクスポート | 用途 |
|---|---|
defineRegistry | カタログから型安全なコンポーネントレジストリを作成 |
Renderer | レジストリを使用してスペックをレンダリング |
schema | React Native要素ツリースキーマ |
standardComponentDefinitions | すべての標準コンポーネント用のカタログ定義 |
standardActionDefinitions | 標準アクション用のカタログ定義 |
standardComponents | 事前構築されたコンポーネント実装 |
createStandardActionHandlers | 標準アクション用のハンドラーを作成 |
useStateStore | ステートコンテキストにアクセス |
useStateValue | ステートから単一の値を取得 |
useBoundProp | $bindState/$bindItem による双方向ステートバインディング |
useStateBinding | (非推奨) パスによるレガシー双方向バインディング |
useActions | アクションコンテキストにアクセス |
useAction | 単一のアクションディスパッチ関数を取得 |
useUIStream | APIエンドポイントからスペックをストリーム |
createStateStore | フレームワークに依存しないインメモリの StateStore を作成 |
StateStore | 外部ステート管理をプラグインするためのインターフェース |
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- vercel-labs
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/vercel-labs/json-render / ライセンス: Apache-2.0
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。