Expo 原生 UI 构建助手
用 @expo/ui 在 Expo 中构建跨平台原生界面。
技能将工具权限限制为运行指定的 Node 组件枚举脚本,未见凭据读取、隐蔽外传或破坏性默认操作;明确要求扩展本地模块前征得用户确认,并披露平台专属导入可能导致运行时崩溃。扣分原因是安装命令、外部文档访问和项目 node_modules 读取的确认、数据流与回滚边界未完整说明,来源归属也主要依赖仓库元数据。
文档具有清晰的 universal-first 决策路径、SDK 版本边界、平台隔离规则和异常导入提示;枚举脚本在缺少项目路径或 @expo/ui 时会输出错误并退出。扣分原因是未见针对关键代码路径的测试或执行证据,脚本只枚举类型定义而不验证 API、文档与项目实际一致性,部分导入安全说明仍存在表述复杂或潜在歧义。
目标用户、适用场景、平台层级选择和非适用范围均描述明确,涵盖 iOS、Android、Web、Expo Router 及社区库迁移。扣分原因是未定义更细的触发条件和输入输出格式,也未提供中文支持;核心参考资料依赖海外 Expo、Android 和 Material 文档,未证明在中国大陆网络环境下可达。
技能采用主文档加分层参考文件结构,包含安装、版本兼容、示例、限制、类型定义优先级和扩展前确认要求;仓库提供 MIT 许可证、版本字段及通用 CI 维护检查。扣分原因是该技能没有变更日志、明确维护负责人或技能级更新路径,故障排查和常见问题覆盖有限,外部链接未固定到修订版本。
内容能直接指导选择 universal、SwiftUI、Jetpack Compose 或 drop-in replacement,并提供可复制的 Host、布局和平台文件示例,核心任务预期可完成。扣分原因是静态材料没有展示已验证的代表性产出或实际项目结果,API 仍需用户自行检查类型和文档,输出完整性与相对手工实现的收益缺乏证据。
仓库内有明确的 SKILL.md、参考文档和可审计的组件枚举脚本,且说明以安装包类型定义作为事实来源。扣分原因是未见覆盖关键路径的提交测试、CI 执行结果或独立第三方复核;外部文档仅以链接形式引用,静态审查无法验证其当前准确性。
- 使用前应在目标项目中核对实际 Expo SDK、@expo/ui 版本及 .d.ts;文档声明“最新 SDK”可能随版本变化。
- 不要在错误的平台加载 @expo/ui/swift-ui 或 @expo/ui/jetpack-compose;应使用平台文件或经过验证的运行时分支。
- LazyColumn 和 List 对大型数据集存在 JS 线程性能限制;扩展原生模块前必须取得用户确认。
- 关键文档依赖外部海外站点,无法从提交材料确认中国大陆网络可达性。
这个 Skill 能做什么,适合哪些场景?
expo-ui 面向 Expo 和 React Native 项目,指导开发者使用 @expo/ui 构建原生 UI。它优先介绍可在 iOS、Android 和 Web 复用的通用组件,也覆盖 iOS SwiftUI 与 Android Jetpack Compose 的平台专用组件。技能还说明如何使用面向社区库的兼容替代组件。通用层要求 Expo SDK 56 或更高版本,而部分替代组件和平台专用层也支持 SDK 55。
指导安装 @expo/ui,要求将所有 UI 树包裹在 Host 中,并帮助选择通用组件、平台专用 SwiftUI/Jetpack Compose 组件或社区库替代组件。它覆盖 Host、Column、Row、Button、Text、List 等通用组件,以及 BottomSheet、DateTimePicker、Slider、Menu 等替代方案。它还说明如何隔离 iOS 和 Android 专用文件、避免跨平台导入导致运行时错误,并允许通过 Bash 运行 Node.js 组件列表脚本。
- Expo 开发者需要用一套组件树同时支持 iOS、Android 和 Web 时,使用通用 @expo/ui 组件。
- React Native 标准组件无法提供分组设置、切换项、菜单、表单或原生弹窗体验时,使用 @expo/ui 构建原生界面。
- 项目需要 SwiftUI 专用行为或 Android Jetpack Compose 专用能力时,分别使用平台专用组件树。
- 已经使用 @gorhom/bottom-sheet 或社区 DateTimePicker 的团队,需要迁移到 @expo/ui 兼容替代组件时,使用对应的 community 模块。
- 开发者审查现有 Host、RNHostView 或原生 UI 树,并需要判断通用层与平台专用层取舍时,参考该技能。
这个 Skill 有哪些优点和局限?
- 以通用组件为优先,支持从单一 React 组件树面向 iOS、Android 和 Web。
- 提供 SwiftUI 和 Jetpack Compose 的平台专用路径,适合需要原生行为或优化的场景。
- 包含面向多个 React Native 社区 UI 库的兼容替代方案。
- 来源明确说明了 SDK 版本要求、Host 包裹规则和跨平台导入风险。
- 平台专用方案需要维护两套 UI 树,并处理 `.ios.tsx`、`.android.tsx` 或 Platform.OS 分支。
- 通用层要求 SDK 56 或更高版本;SDK 55 的支持范围较窄。
- 来源没有提供测试套件、性能基准或各平台覆盖率证据。
- SKILL.md 使用了 `allowed-tools` 的 Bash(Node.js 脚本)权限语法,移植到其他 Agent 实现可能需要调整。
如何安装这个 Skill?
按仓库 README 安装整个 Expo Skills 集合:npx skills@latest add expo/skills --skill '*'。该命令会询问安装目标;来源未提供仅安装 expo-ui 技能的安装命令。安装后重启或刷新 Agent 会话,使其发现 SKILL.md。
如何使用这个 Skill?
在已安装该技能的 Agent 中提出具体任务,例如:“在 Expo 项目中用 @expo/ui 创建一个包含分组设置、开关和菜单的原生界面,并判断应使用通用组件还是平台专用组件。” 使用 @expo/ui 时先从通用组件开始;所有通用或平台专用 UI 树都包裹在从 @expo/ui 导入的 Host 中。平台专用文件应放在 components/ 中的 .ios.tsx 或 .android.tsx 文件内,而不是 Expo Router 的 app/ 目录。
这个 Skill 与同类方案有什么区别?
与标准 React Native UI 相比,expo-ui 适合标准组件无法提供足够原生体验的界面。与 React Native 社区 UI 库相比,它还提供 BottomSheet、DateTimePicker、Slider 和 Menu 等兼容替代组件,适合迁移现有依赖。