@ 声明/反应
反应 SDK 用于 声明,由计划驱动的商业应用平台.
声明允许您从 YAML 计划构建生产业务应用程序: 实体、屏幕、导航、动作和处理器。 这个软件包是Resact客户端,它使这些计划成为针对一个声明API后端的工作UI.
安装
pnpm add @declarion/react
# peer deps:
pnpm add react react-dom
子路径导出
| 导入 | 目的 |
|---|---|
@declarion/react | 主反应条目——组件,钩子,类型 |
@declarion/react/icons | 轻量级图标渲染—— DynamicIcon + 键 setIconRegistry +内置甘油克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 对于使导航从 /api/schema。 。 。 . |
@declarion/react/styles.css | 预编译的 Tailwind 输出;一次从 SPA 根导入 。 Inter + JetBrains Mono号(SIL OFL)作为兄弟 .woff2 文档, 相对引用 - 您的捆绑者发布它们 . |
@declarion/react/vite | 只有节点的 Vite 插件 — 在构建时选择客户端 staleness 处理 |
图标
一个 DSL icon: 值是针对 卢西德 (默认图标)
图书馆,~1500 glyphs),取名. 决议令:消费者宣布 icons:
输入已使用 /api/schema (svg / url / 清晰化的别名)- 所编的内置
套数(src/components/primitives/Icons.tsx薄薄的包裹 在路西德,捆绑
急于即时渲染) ^ 卢西德取名取名 (懒惰) → folder一个主机
含有一个组件的任何图标 :
import { setIconRegistry, DynamicIcon } from "@declarion/react/icons";
// once, after the /api/schema fetch (it carries any custom icons):
setIconRegistry(schema.icons ?? {});
// anywhere, any depth - the registry is a module singleton:
<DynamicIcon name={navItem.icon} size={16} />
setIconRegistry 是模块级存储( 镜像) registerScreen(三); DynamicIcon
订阅方式 useSyncExternalStore,因此替换注册(身份切换)
重报每个图标。 由Lucide解析的空白名称 - 不需要注册条目 .
卢西德的一角 dynamicIconImports 地图只通过 import() 留下来
那是从急躁的、 Icons.tsx set 是树形的命名导入.
见 examples/embed-demo 一个工作主持人.
编译的内置套装只是带有SDK的命名 Luside-组件图
{ size, cls, style } 道具适配器;没有手拉式SVG,也没有编码.
要在急切集中添加一个名称,请在 Icons.tsx; 里面没有的东西
不管来自卢西德 懒惰地解决.
Vite 插件: 为客户端 staleness 处理建立身份
SDK飞船带有一个微小的Vite插件,可以发出 bundle-fingerprint.txt 旁边 index.html 在每次生产建设之后 声明服务器在启动时读取,并将其折叠到盖有每个附件的构建中 /api/* 答复X-Declarion-Version) (中文(简体) ). SDK的内置版本监视器在每次API响应上检测出漂移,在焦点/上线/60s探测上,或者默默地使schema查询无效(schema- only change),或者促使用户重新加载(aget/binary change). 通过 BroadcastChannel。 。 。 .
将插件添加到您的消费应用程序 vite.config.ts数字 :
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { declarionFingerprintPlugin } from "@declarion/react/vite";
export default defineConfig({
plugins: [react(), declarionFingerprintPlugin()],
});
就是这样——没有客户API用手接线. 版本监视器在内部挂起 <App>中,反应头观察员被包含在 apiFetch,而吐司槽重用现有的 Sonner <Toaster/>. 该插件在每一个声明部署模式(本地SDK链接,npm被绑定,预建的prod图像)中工作,因为它运行于消费者建设时间,无论SDK本身来自何处.
未采用插件的消费者却轻而易举地降解:服务器日志在启动时一次倒回二进制只进行漂移检测,其余系统继续工作——漂移仍然被检测出,只是将漂移更保守地归类为"资产/平移",所以用户得到重装即时而非静态无效.
需要浏览器支持 BroadcastChannel 用于跨塔协调——Chrome 54+,Firefox 38+,Safari 15.4+. 在没有它的环境中,"内"检测仍然有效;"跨""外"被悄悄地跳出.
许可证
麻省理工学院. 见 LICENSE。 。 。 .
运行时间
SDK向一个声明运行时间服务器说话. 运行时间为专有商业软件 - 联系人 [email protected] (中文(简体) ) 许可证发放.