新旧架构对比
React Native 的新架构已随0.76 版本成为默认架构,带来了许多框架改进,包括高级渲染系统Fabric。虽然 React Native for Windows 尚未完全准备好将新架构设为默认,但我们一直在努力工作,并很高兴能提供一个在 Windows 上采用新架构的预览。
重要提示:在此阶段,React Native for Windows 的新架构支持附带一些重要注意事项,最适合早期采用者,他们应熟悉仍在开发中且文档不完整的体验。对于那些愿意深入探索的人来说,新架构展现了 React Native Windows 开发令人兴奋的未来。
从 UWP 到 WinAppSDK
在 Windows 上,(旧架构) Paper 渲染的实现使用了通用 Windows 平台 (UWP)。为了满足新 Fabric 渲染器的要求,Windows 的实现现在使用现代的Windows App SDK。这种演进使我们能够利用上游 React Native 跨平台渲染逻辑,同时也能够更好地实现 Windows 专属的平台代码。
这意味着所有 React Native for Windows 新架构应用程序都将成为基于 Win32、WinAppSDK 的应用程序。这与当前 Windows 应用程序开发的建议相符,为 React Native for Windows 开发者提供了更多访问最新 Windows 框架的途径。
所有 React Native for Windows 旧架构应用程序将仍是 UWP 应用程序。创建和维护针对旧架构和 UWP 的应用程序仍然是可能且受支持的(请参阅仍可用的“旧”模板列表)。
但是,请理解,虽然目前没有立即弃用旧架构应用程序支持的计划,但几乎所有未来的投入都将集中在新架构上,并且随着 React Native 最终弃用旧架构支持,React Native for Windows 也会随之弃用。一旦新架构支持更加成熟,我们将为应用程序提供明确的迁移指南。
重要提示:目前没有计划在 UWP 上支持新架构,也没有计划在 WinAppSDK 上支持旧架构。之前实现这两种场景的实验性功能均未得到官方支持。
有关从 UWP 更改为 WinAppSDK 的原因的更多信息,请参阅下面的常见问题解答。
创建新架构应用程序
使用新架构启动 React Native Windows 项目很简单!请遵循我们的入门指南中概述的步骤,但在使用 init-windows 初始化项目时,请务必使用新架构模板。
例如,如果您以前使用旧架构设置项目,您可能使用过如下命令:
yarn react-native init-windows --overwrite
要使用新架构创建项目,请使用相同的命令,但请确保指定新架构模板,例如cpp-app
yarn react-native init-windows --template cpp-app --overwrite
注意:目前只有两个受支持的新架构模板可用:
cpp-app
和cpp-lib
。
开发状态
好消息
从这个新架构预览版开始,现在可以通过遵循上述步骤并使用新的cpp-app
模板来创建新架构应用程序。开发者应该期望 React Native 中绝大多数核心组件、API 和功能(即来自react-native
包)都已在 React Native for Windows 中可用。
在构建开发者体验方面,请务必注意,我们将默认使用预构建二进制文件进行新架构项目,这将大幅提高构建速度并降低开发机器要求。
不太好的消息
然而,仍然存在一些重要的空白,尤其是在社区模块支持方面。首先,通过实现新 UI(即通过 Paper IViewManager
接口)提供 UI 组件的社区模块将无法与新架构应用程序配合使用。这些模块需要实现新的 Fabric ComponentView
,虽然技术上可行,但体验尚未完全成熟,不适合广泛采用。
对于非 UI 社区模块来说,情况则要好得多。一些纯粹的非 UI 社区模块,旨在针对现有的旧架构应用程序构建,可能仍然可以“开箱即用”地与您的新架构应用程序配合使用。但由于社区模块中 Windows 支持的现状各不相同,您可能会发现即使是其中一些非 UI 模块也需要更新。
注意:我们确实有一个新的库模板,
cpp-lib
,可以用于构建针对新架构的非 UI 社区模块。该模板中甚至提供了同时支持旧架构应用程序的代码库。但是,该模板尚未包含为任一架构实现自定义 UI 的任何示例。目标是创建一个支持旧架构和新架构、UI 和非 UI,并包含示例的单一库模板,但目前尚未准备就绪。
剩余工作
我们对 React Native Windows 新架构的工作遵循一系列里程碑,旨在指导我们的开发优先级。目前,我们的重点是实现社区模块以及完整的 API 对等性和改进可访问性功能。
要跟踪实时进度和具体里程碑,请访问我们的React Native for Windows 新架构问题。此页面会定期更新我们的最新开发目标、路线图项目和我们正在积极处理的领域。我们鼓励开发者在那里查看最新可用内容、正在进行的工作和即将推出的内容。
React Native 组件对等性
新架构引入了 UI 渲染方式最重要的更新。通过从 UWP 迁移到 WinAppSDK,我们获得了实现以前不可用的组件的灵活性,同时还缩小了现有组件的对等差距。
也许最显著的变化是,我们终于实现了 React Native 的 Modal
,从而不再需要使用仅限 Windows 的 Flyout
或 Popup
组件。
下面是我们将计划在新架构中支持的组件列表。
支持的组件
计划是在 React Native for Windows 中支持所有 React Native 核心宿主组件。下面每个组件都链接到我们 GitHub 存储库中相应的 issue 标签,该标签跟踪其与新架构的对等进度。
- 视图 (View)
- 文本 (Text)
- 图片 (Image)
- 文本输入 (TextInput)
- 滚动视图 (ScrollView)
- 模态框 (Modal)
- 活动指示器 (ActivityIndicator)
- 开关 (Switch)
- 刷新控制 (RefreshControl)
不支持的组件
以下组件是在 React Native for Windows 旧架构中创建和包含的,旨在解决使用 UWP XAML 带来的独特兼容性问题。目前没有计划在 React Native for Windows 中内置支持这些特定于 Windows 的组件(尽管它们可能得到未来社区模块的支持)。
向我们发送您的反馈
您尝试新架构时肯定会遇到一些障碍、挑战和粗糙之处。我们已经记录了许多问题来跟踪我们待办事项列表中的属性和功能,但如果您遇到尚未解决的重大问题,请在 react-native-windows 存储库中提出问题。您还可以在现有问题上留言,以帮助我们优先处理哪些问题!
常见问题
为什么从 UWP 转向 Windows App SDK?
多年来,React Native for Windows 一直使用通用 Windows 平台 (UWP)及其XAML技术来构建 Windows 应用程序。
然而,这种实现从未完美。UWP XAML 在渲染 UI 方面有其自身的期望和限制,这经常与 React Native 的期望产生冲突。这总是产生一类 React Native for Windows 无法解决的问题。
此外,新架构的许多要求,特别是 Fabric 渲染器带来的更快、更精致的 UI,如果不对 UWP XAML 进行广泛的基础性修改,将无法实现。
现在,对于新的 Windows 应用程序,当前的建议是使用Windows App SDK进行构建。Windows 开发者将应用程序从 UWP 迁移到 Windows App SDK 有许多好处。对于 React Native for Windows 来说,最重要的是 Windows App SDK 为我们提供了正确实现新架构的工具。
为什么从 XAML 转向 Composition?
将 XAML 框架,更不用说特定的控件,适应 React Native 的 API 要求和期望并非总是可行的。然而,感谢 Windows App SDK,我们现在能够“下沉”并使用 XAML 下的 UI 原语层,即 Composition,或者说Windows App SDK 场景图。
因此,现在我们不再尝试用 XAML 控件实现 React Native 组件(并可能与它们的默认行为作斗争),而是能够更直接地在 Composition 中实现这些组件,这使我们能够与 React Native 的期望保持一致,而不是 XAML 的期望。
如果我仍然需要/想要 XAML 控件怎么办?
我们理解客户可能仍然希望在他们的 React Native for Windows 应用程序 UI 中使用 XAML 控件(无论是 Windows App SDK 的 WinUI 3 中包含的任何丰富的控件,还是他们自己的任何现有自定义控件)。
我们正在积极努力实现这一点,但它尚未完全投入生产。我们完全期望支持开发者,尤其是社区模块开发者,能够通过加载 XAML 控件来实现新架构ComponentView
,而不是要求他们使用基本的 Composition API“从头开始”实现控件。
C# 支持怎么样?
我们正在积极努力为 C# 应用程序和模块开发者添加支持。从 UWP C# 到现代 .NET C# 的过渡需要比支持 C++ 更广泛的项目更改。
旧架构会支持针对 Windows App SDK 吗?
不会。计划是旧架构针对 UWP,新架构针对 Windows App SDK。