SuperAPI AI 工具集

using-backstage-ui

前端与建站

查看项目

更新于 10-16 02:23

技能介绍

用途

该技能适用于在 Backstage 前端插件中编写或编辑任何前端组件时使用,帮助开发者从 @backstage/ui(BUI)组件库中挑选合适的组件,并遵循 BUI 的样式与数据获取约定。

主要能力

技能提供按需求选择组件的对照参考,覆盖以下类别:

  • 页面布局与包裹:Box、Container、Flex、FullPage、Grid
  • 排版:Text
  • 按钮与操作:Button、ButtonIcon、ButtonLink
  • 表单:TextField、PasswordField、SearchField、Select、Combobox、Checkbox、RadioGroup、Switch、DatePicker、DateRangePicker
  • 反馈:Alert、Skeleton、Tooltip、Tag、TagGroup
  • 浮层:Dialog、Menu、Popover
  • 导航:Tabs、Header、PluginHeader、Link
  • 数据:Table(含 useTable hook)、List(含 ListRow)、Avatar、Card
  • 图标:@remixicon/react(如 RiSearchLine、RiAddLine)
  • 样式:CSS modules 配合 BUI 令牌(--bui-space-、--bui-fg-、--bui-bg-*)

使用方式

安装:使用 yarn new 脚手架创建的新插件会自动包含 @backstage/ui。如需手动安装:

yarn add @backstage/ui @remixicon/react

然后在应用入口(如 packages/app/src/index.tsx)添加样式表:

import '@backstage/ui/css/styles.css';

该技能有两种调用模式:

  • 独立模式(开发中途):用户正在编辑已有插件组件,选择相关参考并应用。
  • 脚手架后模式(由 creating-backstage-plugin 对任意前端模板调用):将 BUI 默认设置应用到新脚手架插件的示例组件,确保导入来自 @backstage/ui,样式使用带 BUI 令牌的 CSS modules。

数据获取约定:不要手动用 useState 管理 loading/error/data,应使用 react-use 的 hooks。useAsync(fn, deps) 在挂载时及 deps 变化时运行异步函数,用于“组件渲染或 props 变化时加载数据”;useAsyncFn(fn) 返回 [state, callback],用于“用户执行某操作时加载数据”(如按钮点击、表单提交)。手动用 useState 管理 { loading, error, value } 在此代码库中属于反模式,会重复 hook 已正确处理(竞态条件、请求期间卸载等)的逻辑。

示例代码:

import useAsyncFn from 'react-use/lib/useAsyncFn'; import { Button, Skeleton, Alert, Text } from '@backstage/ui';

export const FetchOnDemand = () => { const [{ loading, error, value }, fetch] = useAsyncFn(async (id: string) => { return await someApi.get(id); }, []);

return ( <> <Button onClick={() => fetch('foo')}>Fetch</Button> {loading && <Skeleton width={200} height={20} />} {error && <Alert status="danger" title={error.message} />} {value && <Text>{value.name}</Text>} </> ); };

适用场景

  • 在 Backstage 插件中编写或编辑前端组件。
  • 为布局、排版、表单输入、对话框、菜单、标签页、表格等选择合适组件。
  • 为组件设置样式(BUI 使用 CSS modules + 设计令牌,而非 makeStyles)。
  • 添加图标(使用 @remixicon/react)。

限制与注意事项

  • BUI 不等于 Material UI,不要混用 prop 名称:disabled → isDisabled;variant="contained" → variant="primary"。
  • Flex 使用 justify="between"(不是 space-between);gap 通过内联样式或 BUI 令牌设置。
  • Tooltip 需要 TooltipTrigger 作为父级。
  • TextField 的 onChange 直接接收字符串,而非事件对象。
  • 已知一处 BUI 没有对应替代的情况:@material-ui/lab Timeline 没有 BUI 替代品,该特定场景可使用 MUI。

关于收费、价格、平台支持范围等信息,资料暂未提供。