mcpField
S
spacetimedb-client-typescript

spacetimedb-client-typescript

github.com/danmossa开发2164 次安装19 周前更新
代码仓库

关于 spacetimedb-client-typescript

面向 TypeScript 和 JavaScript 客户端开发的 SpacetimeDB 技能,涵盖生成绑定、订阅、Reducer 和 React 用法。

主要功能

  1. 01生成 TypeScript 绑定
  2. 02查询构建器与订阅
  3. 03Reducer 调用方式
  4. 04React Provider 与 Hooks
  5. 05SDK 包迁移指引

适用场景

  1. 01开发 TypeScript 或 JavaScript 客户端
  2. 02按需订阅表数据并控制生命周期
  3. 03在 React 中使用 SpacetimeDB 数据和 Reducer

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danmossa/spacetimedb-skills --skill spacetimedb-client-typescript

安装后在 Claude Code 中输入/spacetimedb-client-typescript确认已加载。

附带文件references/clients-typescript.md

详细介绍

将此技能用于 TypeScript 和 JavaScript 客户端实现。

TypeScript 核心模式

将绑定生成到客户端源代码树中,然后从该路径导入生成的名称:

spacetime generate --lang typescript --out-dir client/src/module_bindings --module-path spacetimedb
import { DbConnection, tables } from "./module_bindings";

const conn = DbConnection.builder()
  .withUri("ws://localhost:3000")
  .withDatabaseName("my-database")
  .onConnect((ctx, identity, token) => {
    console.log("Connected", identity.toHexString());
    ctx.subscriptionBuilder().subscribe(tables.user);
  })
  .onConnectError((_ctx, err) => console.error(err))
  .onDisconnect(() => console.log("Disconnected"))
  .build();

查询与缓存规则

  • 优先使用生成的查询构建器:tables.user、tables.user.where((u) => u.online.eq(true)) 和表引用数组。
  • 仅在查询构建器无法表达的高级场景中使用原始 SQL 订阅。
  • subscribeToAllTables() 启动后无法取消;请使用特定订阅进行生命周期控制。
  • 行回调(onInsert、onDelete、onUpdate)会针对进入、离开或更新本地缓存的行运行,包括订阅的应用和移除。
  • 使用绑定生成的 reducer;方法名称和参数形式由生成的代码决定。
  • 对于 React,将 DbConnection.builder() 传递给 SpacetimeDBProvider,不要调用 .build()。使用 useTable(tables.foo) 和 useReducer(reducers.foo) 获取响应式数据并进行调用。
  • @clockworklabs/spacetimedb-sdk 已弃用;请将 CLI 与 spacetimedb 包搭配使用,CLI 版本需为 1.4.0 或更高版本。

参考索引

需求打开
TypeScript SDK API 和框架集成references/clients-typescript.md

指南

  • 如有实际项目中的绑定名称,请使用生成的名称;参考中的示例仅为模式,不保证是本地标识符。
  • 按 SDK 参考中展示的顺序进行订阅设置、缓存读取、reducer 观察和 reducer 调用。
  • 如果主要任务是设置项目,请转至 spacetimedb-quickstarts 进行框架引导。

评论

支持 Markdown