用途:SpacetimeDB TypeScript/React 客户端 SDK 参考,面向需要构建连接 SpacetimeDB 的 Web 客户端的开发者。生成的绑定会把 snake_case 名称转为 camelCase,例如服务端列 trip_id 在客户端行上为 tripId。
主要能力:提供 DbConnection 构建器(withUri、withDatabaseName、withToken、withAutomaticReconnect、onConnect、onDisconnect、onConnectError、build),订阅构建器(subscriptionBuilder().onApplied().subscribe([...])),行级回调 onInsert/onDelete/onUpdate,以及 React 侧的 SpacetimeDBProvider、useTable、useSpacetimeDB 钩子。useTable 自行管理订阅并在重放后报告就绪状态,支持 where 条件查询与回调。
使用方式:React 中在 main.tsx 用 SpacetimeDBProvider 包裹应用,通过 useMemo 构建连接并保存 token 到 localStorage;在组件中用 useTable(tables.xxx) 获取数据与就绪标志,用 getConnection() 调用 reducers。非 React 场景直接构建 DbConnection,注册一次订阅与行回调,SDK 会在重连后重放订阅。
自动重连与令牌:React provider 的连接管理器启用自动重连;直连需显式 .withAutomaticReconnect(),否则不会自动恢复,初始失败也不重试。已建立连接断开后按指数退避加抖动重试,minDelayMs 默认 1 秒、maxDelayMs 默认 30 秒,可用 .withAutomaticReconnect({ minDelayMs, maxDelayMs }) 调整,低于 500 毫秒与 1 秒下限会被提升并警告。凭据过期时可加 .withTokenProvider(() => refreshTokenAsync()),初始令牌用 .withToken(initialToken),provider 仅用于重连尝试,须返回同一身份的非空令牌。
限制与注意:断开期间的调用立即失败;未返回结果的 reducer/procedure promise 会以 UnknownCallResultError 拒绝,服务端可能已执行,SDK 不会重放,不要自动重试非幂等调用。useTable 返回的行是只读的,排序或修改前需复制。t.u64()/t.i64() 列返回 bigint,React 无法直接渲染,需用 Number(row.id) 或 String(count) 包装。不要在渲染期间调用 reducers,应在事件处理器中调用。手动订阅需保留句柄并在不再需要时调用 unsubscribe()。重连握手成功不代表重放完成,应以钩子的 isReady 判断数据就绪。自动恢复待处理时不要自建替代连接或重试计时器;显式 conn.disconnect() 会停止恢复。