mcpField
R
react-ui

react-ui

github.com/val-town开发1042 次安装5 周前更新
代码仓库

关于 react-ui

面向 Val Town 的 React 界面开发指南,涵盖文件约定、样式、资源提供、源码链接和 UI val 的验证方式。

主要功能

  1. 01React UI 组件约定
  2. 02Twind 与 Tailwind 样式
  3. 03不可变资源提供
  4. 04UI val 的源码链接
  5. 05UI 验证步骤

适用场景

  1. 01构建交互式 val 界面
  2. 02将 UI 拆分到 TSX 文件
  3. 03检查页面渲染和浏览器错误

安装

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

$npx skills add https://github.com/val-town/plugins --skill react-ui

安装后在 Claude Code 中输入/react-ui确认已加载。

详细介绍

React UI

对于任何会渲染 UI 的 val,除非用户另有说明,否则优先使用 .tsx 文件中的 React 组件构建。templates/react-hono-starter 模板已为此配置好——从那里开始使用 remix_val,而不是从头构建。

文件约定

将标记、样式和脚本放在实际文件中——避免使用模板字面量字符串(例如 new Response(\...`)`)。模板字符串中的代码没有语法高亮、Lint 检查或类型检查,也无法进行审查。

  • .tsx — React/JSX 组件,以及包含逻辑或交互功能的任何 UI
  • .html — 纯静态标记
  • .ts — 服务端代码和脚本

在 .tsx 文件中逐个组件构建 UI。组合小型组件,而不是渲染一个庞大的页面。

样式:Twind + Tailwind

优先使用 Twind 在运行时应用 Tailwind 工具类——无需构建步骤。将脚本添加到 HTML 外壳中:

<script src="https://cdn.twind.style" crossorigin></script>

然后在 JSX 中直接使用 Tailwind 类:

<div className="flex items-center gap-4 p-6 rounded-lg bg-white shadow">
  <h1 className="text-2xl font-bold">Hello</h1>
</div>

除非用户另有说明,否则避免使用内联 <style> 标签、CSS-in-JS 对象或单独的 .css 文件。

提供资源:版本化且不可变

使用 std/utils 中的 serveImmutableFile 提供客户端模块——浏览器会以不可变方式缓存这些模块,而发布时会递增 val 的版本,从而自动使缓存失效(完整模式见 client-side-js 技能)。一个永不缓存的 frontend/root.tsx 外壳(hono/jsx)会使用 immutableFileUrl 为入口文件和 favicon 添加时间戳:

// frontend/root.tsx — in the Root() HTML shell:
<script src={immutableFileUrl("/frontend/index.tsx")} type="module" />

// index.ts:
app.get("/", (c) => c.html(Root()));
app.get("/__immutable/*", (c) => serveImmutableFile(c.req.path));

查看源代码链接

每个 UI val 都应提供一种方式,让用户查看并 remix 其源代码。以下两部分缺一不可:

  1. 后端路由:
    import { parseVal } from "https://esm.town/v/std/utils/index.ts";
    app.get("/source", (c) => c.redirect(parseVal().links.self.val));
    
  2. 前端中的可见链接:
    <a href="/source">view source</a>
    

固定 React 版本

常见错误 "Cannot read properties of null (reading 'useState')" 表示某个 React 子依赖加载了不同版本的 React。将所有 React 相关导入固定到 18.2.0:

import SomeLib from "https://esm.sh/[email protected],[email protected]";

资源

不要使用可能失效的外部图片或托管资源。优先使用:

  • Emoji 或 Unicode 符号
  • 内联 SVG
  • 通过 CDN 加载的图标字体(Lucide、Font Awesome)

显示客户端错误

若要将浏览器错误发送回 val 日志(可通过 get_logs 查看),请在 HTML 外壳中加入此脚本:

<script src="https://esm.town/v/std/catch"></script>

验证更改

编辑 UI val 后,调用 fetch_val_endpoint 确认页面渲染无误,然后检查 get_logs 中是否有客户端错误。两项检查都完成后,才能报告更改已完成。

评论

支持 Markdown