发布级别
React Native 为社区提供了这样一种能力:即使某个新功能的设计和实现还未完全完成、甚至在稳定版发布之前,也可以尽快采用该功能。这种方式被称为 发布级别。
你可以配置 React Native 的发布级别,使你的 React Native 实例在初始化时将 Feature Flags 设置为 EXPERIMENTAL、CANARY 或 STABLE 模式。
这种方式类似于 React 中的 Canary 和 Experimental 发布,但有一个关键区别:无论发布级别如何,使用的都是相同版本的 React JS 和 React Native 代码。
React Native 也不会使用 @canary 或 @experimental 的 NPM 标签,因为发布级别同时适用于 React Native 的稳定版和 nightly 版本。
此外,将发布级别设置为 EXPERIMENTAL 或 CANARY 不会 导致使用 react@nightly 或 react@canary,这是由 react-native 使用 React 版本的方式决定的(详情请参阅此处)。
何时使用各个发布级别
STABLE:- 适用于所有生产应用和库,这些项目不需要提前访问尚未发布的功能。
- 这是稳定版和 nightly 版本的默认级别。
CANARY:- 如果你是框架作者、高级应用开发者,或者需要在新功能发布到稳定版之前进行测试或采用它们,请使用此级别。
- 不建议用于生产环境或面向用户的应用。
EXPERIMENTAL:- 仅用于测试早期开发阶段的新功能并提供反馈
- 不建议用于生产环境或面向用户的应用。
如何使用 Canary 和 Experimental 初始化 React Native
Android
DefaultNewArchitectureEntryPoint 类现在有一个 releaseLevel 属性(默认值:STABLE)。
特性标志系统使用该属性来为所选发布级别选择合适的一组特性标志。
DefaultNewArchitectureEntryPoint.releaseLevel = ReleaseLevel.CANARY
DefaultNewArchitectureEntryPoint.load()
构建系统会为每个发布级别生成不同的特性标志覆盖类,确保在每个阶段启用正确的功能。
iOS
RCTReactNativeFactory 类现在提供一个接收 releaseLevel 参数的初始化器。特性标志设置会使用该参数选择正确的覆盖项。请在 SceneDelegate 中创建 factory;如果未使用 UIScene 生命周期,则在 AppDelegate 中创建。
- ObjectiveC
- Swift
self.reactNativeFactory = [[RCTReactNativeFactory alloc] initWithDelegate:self releaseLevel:Canary];
reactNativeFactory = RCTReactNativeFactory(delegate: self, releaseLevel: RCTReleaseLevel.Canary)
未使用 UIScene 生命周期的应用
- ObjectiveC
- Swift
[[RCTReactNativeFactory alloc] initWithDelegate:delegate releaseLevel:Canary];
let factory = RCTReactNativeFactory(delegate: delegate, releaseLevel: RCTReleaseLevel.Canary)
系统会确保每个应用实例只激活一个发布级别;如果创建了多个使用不同发布级别的 factory,则会崩溃。