<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>设计系统 on KnightLi的博客</title>
        <link>https://knightli.com/tags/%E8%AE%BE%E8%AE%A1%E7%B3%BB%E7%BB%9F/</link>
        <description>Recent content in 设计系统 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sun, 12 Jul 2026 12:15:00 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/%E8%AE%BE%E8%AE%A1%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Astryx 怎么给 AI 生成前端接入设计系统：React 组件、主题与验收约束</title>
        <link>https://knightli.com/2026/07/12/astryx-ai-generated-frontend-react-design-system-theme-guide/</link>
        <pubDate>Sun, 12 Jul 2026 12:15:00 +0800</pubDate>
        
        <guid>https://knightli.com/2026/07/12/astryx-ai-generated-frontend-react-design-system-theme-guide/</guid>
        <description>&lt;p&gt;让 AI 生成一个页面并不难；难的是第二个、第三个页面仍然沿用正确的颜色、间距、组件状态、无障碍属性和交互边界。Astryx 是 Meta 开源的 React 设计系统，官方称其处于 Beta，提供 150 多个可访问组件、主题、暗色模式、模板和 CLI，并允许使用 CSS 自定义属性进行主题覆盖。&lt;a class=&#34;link&#34; href=&#34;https://github.com/facebook/astryx&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;官方仓库&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;把 Astryx 接给 Agent 的目的不是让模型“自由设计”，而是让人和 Agent 都使用同一套组件与文档。&lt;/p&gt;
&lt;h2 id=&#34;先判断是否适合引入&#34;&gt;先判断是否适合引入
&lt;/h2&gt;&lt;p&gt;适合的项目通常具备以下任一条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React 项目已经有多个后台页面，AI 生成的 UI 开始出现风格漂移；&lt;/li&gt;
&lt;li&gt;团队需要统一按钮、表单、弹窗、空状态和深色模式；&lt;/li&gt;
&lt;li&gt;希望 Agent 优先组合现有组件，而不是每次手写一套 CSS；&lt;/li&gt;
&lt;li&gt;允许在 Beta 依赖上做隔离验证和版本锁定。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果项目不是 React，或已有成熟的内部组件库，先不要为了追热点重构。更现实的做法是把“组件优先、token 优先、截图验收”这些方法迁移到现有设计系统。&lt;/p&gt;
&lt;h2 id=&#34;安装与最小主题&#34;&gt;安装与最小主题
&lt;/h2&gt;&lt;p&gt;官方示例的包名如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install @astryxdesign/core @astryxdesign/theme-neutral
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -D @astryxdesign/cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;先在一个独立分支或小页面验证构建、样式加载和深色模式，再扩展到应用入口。不要让 Agent 直接替换全局样式、路由壳或已有 token 文件。&lt;/p&gt;
&lt;p&gt;主题应表达品牌约束，而不是让每个页面随意覆盖。可以把允许修改的颜色、圆角、字体和间距写在项目规则里，让 Agent 知道“应该复用什么”，而不只是告诉它“做得高级一点”。&lt;/p&gt;
&lt;h3 id=&#34;先做一个小页面而不是替换应用外壳&#34;&gt;先做一个小页面，而不是替换应用外壳
&lt;/h3&gt;&lt;p&gt;推荐从一个单独路由开始，例如设置页、筛选侧栏或数据详情卡片。先列出这个页面当前使用的字体、间距、色彩 token、交互状态和已有组件，再让 Agent 用 Astryx 重建其中一个区域。此时保留原来的路由、数据请求、权限判断和全局样式入口；设计系统只负责组件与主题，不承担业务迁移。&lt;/p&gt;
&lt;p&gt;本地验证顺序可以固定为：安装依赖后启动开发服务器；分别查看浅色和深色模式；用键盘 Tab 走完表单、弹窗和按钮；将窗口缩窄到移动宽度；最后再运行现有测试或构建。每一步出现问题都应记录在该组件的改动中，避免等多个页面都接入后才发现 token 覆盖、CSS 优先级或焦点管理有冲突。&lt;/p&gt;
&lt;p&gt;当小页面稳定后，把它作为参考实现：记录允许引入的包、主题入口、组件导入方式和不可改动的全局文件。后续 Agent 的任务只引用这份参考，而不是让每次生成都重新猜项目约定。&lt;/p&gt;
&lt;h2 id=&#34;给-agent-的项目级约束&#34;&gt;给 Agent 的项目级约束
&lt;/h2&gt;&lt;p&gt;把下面这类规则放进项目的 &lt;code&gt;AGENTS.md&lt;/code&gt;、&lt;code&gt;CLAUDE.md&lt;/code&gt; 或 Skill 中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 新页面优先使用 @astryxdesign 现有组件；新增自定义组件前先说明原因。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 不新增全局 CSS reset，不修改既有主题 token。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 所有表单字段必须有可见 label、错误态和禁用态。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 完成后提供桌面和窄屏截图，并列出新增组件与交互状态。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 不以截图相似为唯一验收；保留键盘操作和语义结构。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这比“用设计系统做一个仪表盘”更可执行。Agent 有明确的禁止项、复用路径和交付物，审查者也能快速看出它是否绕开了组件库。&lt;/p&gt;
&lt;h3 id=&#34;把输入输出和禁止项写进任务单&#34;&gt;把输入、输出和禁止项写进任务单
&lt;/h3&gt;&lt;p&gt;实际任务最好包含页面范围、可使用的数据、允许修改的文件和验收截图。比如：只修改 &lt;code&gt;src/features/orders/FilterPanel.tsx&lt;/code&gt;；复用现有查询参数；不新增依赖、不改路由、不修改 &lt;code&gt;theme.ts&lt;/code&gt;；完成后给出窄屏和桌面截图，并列出 Button、Select、Dialog 的状态。这能避免 Agent 为了完成视觉目标顺手改掉全局 reset、状态管理或 API 层。&lt;/p&gt;
&lt;p&gt;对复杂组件，让 Agent 先提交结构草案：有哪些区块、分别对应什么 Astryx 组件、有哪些 loading/error/empty 状态。人工确认结构后再写代码，通常比一次生成整页后逐项返工更快。若设计稿与组件库能力不一致，应优先调整设计或明确新增组件的维护者，而不是塞一段无法复用的临时 CSS。&lt;/p&gt;
&lt;h2 id=&#34;用四层验收减少-ui-漂移&#34;&gt;用四层验收减少 UI 漂移
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;层级&lt;/th&gt;
          &lt;th&gt;要检查什么&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;组件&lt;/td&gt;
          &lt;td&gt;是否复用 Button、Input、Dialog 等既有组件，状态是否齐全&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;主题&lt;/td&gt;
          &lt;td&gt;是否只通过允许的 token 或 CSS 变量改变视觉风格&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;交互&lt;/td&gt;
          &lt;td&gt;键盘焦点、加载态、错误态、空状态是否可用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;交付&lt;/td&gt;
          &lt;td&gt;构建是否通过，截图是否覆盖关键页面，改动是否有组件清单&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;不要把“视觉一致”理解成复制像素。真正需要稳定的是可访问语义、状态机、主题来源和可维护的组件边界。&lt;/p&gt;
&lt;h2 id=&#34;一个可重复的验收流程&#34;&gt;一个可重复的验收流程
&lt;/h2&gt;&lt;p&gt;每次合入前，先由开发者核对 diff：是否新增了绕过组件库的全局样式、是否把品牌颜色写死、是否修改了无关文件。然后在浏览器中验证四种状态：正常数据、加载中、空数据、接口失败；表单还要额外验证必填、格式错误、禁用和提交中。截图只覆盖正常态会掩盖大多数回归。&lt;/p&gt;
&lt;p&gt;最后用键盘完成一次关键流程：Tab 是否按可理解的顺序移动、焦点是否进入并离开 Dialog、错误消息是否与字段关联、颜色是否仍有足够对比度。把检查项放进 PR 模板后，Agent 生成的页面也会被同一套标准约束，而不会因为“看起来差不多”就直接合并。&lt;/p&gt;
&lt;h2 id=&#34;常见误区&#34;&gt;常见误区
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;把 Beta 当成全站重构理由&lt;/strong&gt;：先锁版本，在单一功能域验证升级成本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;让 Agent 直接改组件内部&lt;/strong&gt;：优先组合与主题覆盖；只有确有需要时才导出或接管源码。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;每个页面写一套临时 CSS&lt;/strong&gt;：这会让设计系统只剩包名，无法约束后续 Agent。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只验截图不验交互&lt;/strong&gt;：截图无法发现 tab 顺序、错误反馈和不可点击的按钮。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;Astryx 适合用于建立“人和 Agent 使用同一套前端语言”的约束。先用少量页面验证组件、主题和验收流程，再把规则沉淀到项目文件；不要让新设计系统变成另一层无人维护的抽象。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
