用途:该技能用于在 Expo 或 React Native 应用中使用 @expo/ui 包构建原生界面——在 iOS 上渲染真正的 SwiftUI,在 Android 上渲染 Jetpack Compose,均由 React 驱动。适合需要原生观感、又不愿为两端各写一套原生代码的场景。
主要能力与选择顺序:优先使用通用组件层,从 @expo/ui 根路径导入;一套组件树可未经修改地同时运行于 iOS、Android 与 Web(Android 用 Compose、iOS 用 SwiftUI、Web 用 react-native-web/react-dom),无需拆分平台文件。当通用层缺少所需组件或修饰符,或需要平台特有行为与优化时,再下沉到平台专用层:@expo/ui/swift-ui(仅 iOS)与 @expo/ui/jetpack-compose(仅 Android)。若正在使用 RN 社区 UI 库,还提供 API 兼容的即插即用替代,从 @expo/ui/community/<name> 导入,用于替换现有依赖(如 @gorhom/bottom-sheet、@react-native-community/datetimepicker 等)。
使用方式:安装命令为 npx expo install @expo/ui。在 SDK 56 上 @expo/ui 可在 Expo Go 中运行,直接执行 npx expo start 即可,无需自定义构建;较旧 SDK 需先构建开发客户端(npx expo run:ios / npx expo run:android)。每个 @expo/ui 组件树(无论通用还是平台专用)都必须用 Host 包裹,且 Host 始终从 @expo/ui 根包导入。
限制:通用层需要 SDK 56 及以上;平台专用层与即插即用替代在 SDK 55 也可用。平台专用包若在另一平台运行的文件中被导入,会在运行时以“Unable to get view config”报错崩溃,应将平台专用树隔离在 .ios.tsx/.android.tsx 文件中(放在 components/ 下,不要放在 app/,因为 Expo Router 不支持路由文件的平台扩展名),或用 Platform.OS 在普通路由文件中做分支。具体组件细节请查阅对应 SDK 版本的 Expo UI 文档。仅在任务明确匹配其上游产品或 API 范围时使用;执行前应依据当前官方文档核实命令、API 行为、价格、配额、凭据与部署影响;生成的示例不能替代针对具体环境的测试、安全审查或对破坏性、高成本操作的用户批准。