Appendix
这个文档仍然是实验性的,随着我们的迭代,细节会有变化。欢迎在工作小组内的讨论中分享你的反馈。
此外,它还包含几个手动步骤。请注意新架构尚未稳定下来,最终的开发者体验会继续迭代改善。我们正在努力开发工具、模板和库,以帮助你在新架构上快速入门,而不需要经历整个设置过程。
一、术语
整个与新架构相关的指南将遵循以下术语:
- 传统原生组件 - 指运行在旧版 React Native 架构上的组件。
- 传统原生模块 - 指运行在旧版 React Native 架构上的模块。
- Fabric 原生组件 - 指已经适配以与新架构(即新渲染器)良好协同工作的组件。为简洁起见,您可能会看到它们被称为Fabric 组件。
- Turbo 原生模块 - 指已经适配以与新架构(即新原生模块系统)良好协同工作的模块。为简洁起见,您可能会看到它们被称为Turbo 模块。
II. Flow 类型到原生类型的映射
您可以使用以下表格作为参考,了解每个平台支持哪些类型以及它们在各个平台上的映射关系:
string
Nullable Support? | ?string |
---|---|
Android (Java) | String |
iOS | NSString |
boolean
Nullable Support? | ?boolean |
---|---|
Android (Java) | Boolean |
iOS | NSNumber |
对象字面量
比起普通的Object
来说我们更推荐使用对象字面量,其更具有类型安全性。
示例: {| foo: string, ... |}
Nullable Support? | ?{| foo: string, ...|} |
---|---|
Android (Java) | - |
iOS | - |
Object
推荐使用对象字面量。
Nullable Support? | ?Object |
---|---|
Android (Java) | ReadableMap |
iOS | @ (untyped dictionary) |
Array<*>
Nullable Support? | ?Array<*> |
---|---|
Android (Java) | ReadableArray |
iOS | NSArray (or RCTConvertVecToArray when used inside objects) |
Function
Nullable Support? | ?Function |
---|---|
Android (Java) | - |
iOS | - |
Promise<*>
Nullable Support? | ?Promise<*> |
---|---|
Android (Java) | com.facebook.react.bridge.Promise |
iOS | RCTPromiseResolve and RCTPromiseRejectBlock |
类型联合
类型联合仅支持作为回调函数。
Example: 'SUCCESS' | 'FAIL'
Nullable Support? | Only as callbacks. |
---|---|
Android (Java) | - |
iOS | - |
回调函数
回调函数没有类型检查,并且被泛化为Object
。
Example: () =>
Nullable Support? | Yes |
---|---|
Android (Java) | com.facebook.react.bridge.Callback |
iOS | RCTResponseSenderBlock |
您可能还会发现参考 React Native 中核心模块的 JavaScript 规范很有用。这些规范位于 React Native 存储库中的Libraries/
目录内。
III. TypeScript 到原生类型映射
您可以使用以下表格作为参考,了解支持的类型以及它们在每个平台上的映射关系:
string
Nullable Support? | string | null |
---|---|
Android (Java) | String |
iOS | NSString |
boolean
Nullable Support? | boolean | null |
---|---|
Android (Java) | Boolean |
iOS | NSNumber |
number
Nullable Support? | No |
---|---|
Android (Java) | double |
iOS | NSNumber |
Object literal
This is recommended over using plain Object
, for type safety.
Example: {| foo: string, ... |}
Nullable Support? | {| foo: string, ...|} | null |
---|---|
Android (Java) | - |
iOS | - |
Object
Recommended to use Object literal instead.
Nullable Support? | Object | null |
---|---|
Android (Java) | ReadableMap |
iOS | @ (untyped dictionary) |
Array<*>
Nullable Support? | Array<*> | null |
---|---|
Android (Java) | ReadableArray |
iOS | NSArray (or RCTConvertVecToArray when used inside objects) |
Function
Nullable Support? | ?Function | null |
---|---|
Android (Java) | - |
iOS | - |
Promise<*>
Nullable Support? | Promise<*> | null |
---|---|
Android (Java) | com.facebook.react.bridge.Promise |
iOS | RCTPromiseResolve and RCTPromiseRejectBlock |
Type Unions
Type unions are only supported as callbacks.
Example: 'SUCCESS' | 'FAIL'
Nullable Support? | Only as callbacks. |
---|---|
Android (Java) | - |
iOS | - |
Callbacks
Callback functions are not type checked, and are generalized as Object
s.
Example: () =>
Nullable Support? | Yes |
---|---|
Android (Java) | com.facebook.react.bridge.Callback |
iOS | RCTResponseSenderBlock |
您可能还会发现参考 React Native 中核心模块的 JavaScript 规范很有用。这些规范位于 React Native 存储库的Libraries/
目录内。
IV. 在开发过程中调用代码生成
本节包含特定于 React Native v0.66 的信息。
通常在构建时调用 Codegen,但是您可能会发现按需生成原生接口代码以进行故障排除很有用。
如果您希望手动调用 codegen,有两个选项:
- 直接调用 Gradle 任务(Android)。
- 手动调用脚本。
Android - 直接调用 Gradle 任务
您可以通过调用以下任务来触发 Codegen:
./gradlew generateCodegenArtifactsFromSchema --rerun-tasks
额外的 --rerun-tasks
标志被添加以确保 Gradle 忽略对该任务的 UP-TO-DATE
检查。在正常开发过程中,您不应该需要它。
generateCodegenArtifactsFromSchema
任务通常在 preBuild
任务之前运行,因此您不需要手动调用它,但它将在构建之前触发。