This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
使用 Jetpack Compose 扩展
了解如何创建与 Expo UI 集成的自定义 Jetpack Compose 组件和修饰符
本指南介绍如何使用 Expo Modules API 创建可与 Expo UI 集成的自定义 Jetpack Compose 组件和修饰符。
3 requirements
3 requirements
1.
@expo/ui 已安装更多信息请参阅 Expo UI 中的 Jetpack Compose 组件。
2.
自定义 Expo 模块包含原生代码,Expo Go 无法加载。请为应用创建一个开发版本。
3.
本指南假设你对 Expo Modules API 和 Jetpack Compose 有基本了解。
创建自定义组件
项目设置
1
在项目中创建一个本地 Expo 模块:
2
更新模块的 android/build.gradle,以启用 Jetpack Compose 并依赖 expo-ui。以下代码片段中的注释标出了需要添加到默认脚手架中的行:
创建 Compose 视图
3
创建 Compose 视图。它包含两部分:
- Props 数据类:带有
@OptimizedComposeProps注解,实现ComposeProps,并包含一个用于modifiers属性的modifiers: ModifierList字段。 @Composable内容函数:FunctionalComposableScope的扩展函数,因此可以调用ModifierRegistry.applyModifiers(...)并渲染Children(...)。
4
使用 ExpoUIView 在模块中注册视图。这会将 @Composable 内容接入 Expo 模块的视图系统,并使其可供 JavaScript 使用:
5
创建一个封装组件,将修饰符与事件处理连接起来。createViewModifierEventListener 工具可让 clickable 和 onVisibilityChanged 等基于事件的修饰符在自定义视图中正常工作:
6
从模块的入口文件导出组件:
使用自定义组件
现在,自定义组件可以使用所有内置的 Expo UI 修饰符:
创建自定义修饰符
你也可以创建适用于任何 Expo UI 组件的自定义修饰符。
修饰符是 Compose 用于配置布局样式、尺寸、行为等的方式。更多信息请参阅 Android 的 Compose 修饰符文档。
原生修饰符实现
1
将修饰符参数定义为 @OptimizedRecord 数据类。然后编写一个根据这些参数返回 Modifier 的函数:
compose 是定义在 expo.modules.ui 包中的 android.graphics.Color? Kotlin 扩展属性。通过 import expo.modules.ui.compose 导入后,可以调用 params.color.compose,将从 JS 解析得到的 Android Color 转换为 Compose API(例如 BorderStroke)所需的 androidx.compose.ui.graphics.Color。Expo UI 的内置修饰符也使用了同一个辅助工具。
2
在模块定义中使用 ModifierRegistry 注册修饰符。使用 OnCreate 进行注册,并使用 OnDestroy 取消注册,避免工厂在模块重新加载时发生泄漏:
register lambda 接收从 JavaScript 发送的原始映射、当前的 ComposableScope(可用于 weight 或 align 等依赖作用域的修饰符)、AppContext 和事件分发器。大多数修饰符只需要 map,并通过 recordFromMap<T>(map) 转换它。
JavaScript 修饰符函数
3
创建一个用于构造修饰符配置的 TypeScript 函数:
4
从模块中导出修饰符:
使用自定义修饰符
自定义修饰符适用于任何 Expo UI 组件:
后续步骤
现在,自定义组件可以使用内置的修饰符系统。
以下是一些接下来可以尝试的方向:
- 使用 Expo UI 附带的内置 Jetpack Compose 组件。
- 为应用特定的样式模式构建自定义修饰符。
- 封装第三方 Compose 库,以便在 React Native 中使用。
- 将组件作为 npm 包分享给他人使用。