This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 57).
使用 Jetpack Compose 扩展
了解如何创建可与 Expo UI 集成的自定义 Jetpack Compose 组件和修饰符。
本指南说明如何使用 Expo Modules API 创建自定义 Jetpack Compose 组件和修饰符,并将其集成到 Expo UI 中。
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 data class:带有
@OptimizedComposeProps注解、实现ComposeProps,并包含一个modifiers: ModifierList字段,用于modifiers属性。 @Composable内容函数:扩展自FunctionalComposableScope,以便调用ModifierRegistry.applyModifiers(...)并渲染Children(...)。
4
在你的模块中使用 ExpoUIView 注册该视图。这会将你的 @Composable 内容接入 Expo modules 视图系统,并使其可供 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 发送来的原始 map、当前的 ComposableScope(用于像 weight 或 align 这类依赖作用域的修饰符)、AppContext 以及事件分发器。大多数修饰符只需要 map,并通过 recordFromMap<T>(map) 将其转换。
JavaScript 修饰符函数
3
创建一个用于构建修饰符配置的 TypeScript 函数:
4
从你的模块中导出该修饰符:
使用自定义修饰符
你的自定义修饰符可用于任何 Expo UI 组件:
下一步
你的自定义组件现在可以使用内置修饰符系统。
以下是一些下一步可以尝试构建的内容:
- 使用 Expo UI 提供的内置 Jetpack Compose 组件。
- 为应用专属的样式模式构建自定义修饰符。
- 封装第三方 Compose 库,以便在 React Native 中使用。
- 将组件作为 npm 软件包分享给他人使用。