宣布发布 React Native 0.66
今天,我们发布了 React Native v0.66,其中包含对 Android 12 和 iOS 15 的支持,以及修复和常规更新。
今天,我们发布了 React Native v0.66,其中包含对 Android 12 和 iOS 15 的支持,以及修复和常规更新。
React Native 在提升移动开发标准方面取得了巨大的成功,无论是在 Facebook 还是行业的其他地方。随着我们以新的方式与计算机互动以及新设备的出现,我们希望 React Native 能为所有人提供服务。虽然 React Native 最初是为了构建移动应用而创建的,但我们相信,专注于多个平台并构建每个平台的优势和约束会产生共生效应。当我们将这项技术扩展到桌面和虚拟现实时,我们看到了巨大的好处,我们很高兴与大家分享这对于 React Native 未来意味着什么。
在过去的一年里,我们的世界发生了巨大的变化,React Native 也不例外。我们迎来了团队的新成员(我们很高兴最终能与他们见面!),我们的项目已经成熟,新的机会也随之而来。我们很高兴在本文和其他即将发布的文章中与大家分享所有这些内容!
在 Facebook,我们的团队以半年为周期工作。每个半年,我们都会回顾我们的策略,制定计划,并在内部分享。今天,我们想与我们的社区分享我们的下半年计划。
2021 年下半年对于 React Native 来说是一个激动人心的时期。我们的重点领域包括培养社区、开始将新架构推广到开源领域以及推动技术进步。
今天,我们发布了 React Native 0.65 版本,其中包含 Hermes 的新版本、可访问性改进、软件包升级等。
Hermes 是 Facebook 为 React Native 优化的开源 JavaScript 虚拟机,现已升级到 0.8.1 版本。此版本的一些突出功能包括
Intl
) 现在已内置于 Android 上的 Hermes 并默认启用,每个 API 的大小开销仅为 57-62K(相比之下,JSC 为 6MiB)。通过此更改,Hermes 用户不再需要区域设置 polyfill。非常感谢@mganandraj 和 Microsoft 的其他合作伙伴推动实施以实现这一目标!Function.prototype.toString
的更改,修复了由于功能检测不当导致的性能下降 并支持源代码注入用例。您可以在此处找到完整的Hermes 变更日志。
请按照此处的步骤操作,如果您尚未选择加入 Hermes,请立即选择加入,以利用这些新功能和优势!
去年Facebook 做出了全球无障碍意识日承诺,以改善 React Native 的可访问性。0.65 版本分享了此承诺以及其他可访问性成果!一些值得注意的更改包括
getRecommendedTimeoutMillis
API。此 API 公开了用户在 Android 的辅助功能选项中设置的首选默认超时值,适用于可能需要额外时间来查看或访问控件等的使用者。disabled
和 unselected
。您可以在此处关注或参与我们的未解决的可访问性问题!
react-native-codegen
版本 0.0.7
现在需要作为 package.json
中的 devDependency
。此版本包含来自61 位贡献者的1100 多次提交。感谢所有为本版本做出贡献和提供支持的人!您可以在此处找到完整的更改日志。
自从 Facebook 承诺GAAD 承诺使 React Native 变得无障碍以来,已经过去了一年,并且该项目的成果超出了我们的预期。我们很高兴地宣布,该项目将在 2021 年继续进行,并希望向大家更新迄今为止的进展情况。在去年对 React Native 中的无障碍差距进行彻底分析之后,开始着手填补这些差距。
我们从 90 个未解决的差距分析问题开始,从 2021 年 3 月项目在 GitHub 上启动至今
社区已关闭 11 个问题。
React Native 团队评估并关闭了 19 个问题。
合并了 9 个拉取请求。
将 1 个拉取请求合并到 React Native 文档中。
我们要感谢并认可 React Native 社区在过去一年中为实现更无障碍的 React Native 所做出的重大努力。每位贡献者的努力都为改善 React Native 的无障碍性做出了贡献。
自从我们向 GitHub 社区提出经过全面审查的差距分析和问题列表以改善 React Native 的无障碍性以来,已经过去了四周。在 React Native 社区的帮助下,我们已经在改善无障碍性方面取得了长足的进步。社区成员一直在帮助贡献者、审查测试并引起人们对先前无障碍问题的关注。自 3 月 8 日以来,社区已通过四个拉取请求关闭了六个问题,还有七个其他拉取请求正在等待审查。
在继续这项工作的同时,Facebook 的 React Native 和无障碍团队正在评估在此倡议之前提交的无障碍错误和问题,以确定它们是否已被我们当前的差距分析所涵盖,或者是否存在需要纳入项目的其他问题。我们已经发现了一个新问题并将其纳入项目,另外四个问题直接映射到现有问题,另外两个问题预计可以通过解决解决其根本原因的现有问题来关闭。
感谢所有参与的社区成员。你们确实在使 React Native 对每个人都更易于访问方面发挥了作用!
今天,我们发布了 React Native 0.64,其中包含对 iOS 上 Hermes 的支持。
Hermes 是一款针对运行 React Native 而优化的开源 JavaScript 引擎。它通过减少内存使用、减小下载大小以及减少应用程序变得可用或“交互时间”(TTI)所需的时间来提高性能。
在此版本中,我们很高兴地宣布,您现在也可以使用 Hermes 在 iOS 上构建。要在 iOS 上启用 Hermes,请在您的 Podfile
中将 hermes_enabled
设置为 true
并运行 pod install
。
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
)
请记住,iOS 上的 Hermes 支持仍处于早期阶段。由于我们正在进行进一步的基准测试,因此我们将其作为选择加入功能。我们鼓励您在自己的应用程序中尝试它,并告诉我们它的效果如何!
内联 Require 是一个 Metro 配置选项,它通过延迟执行 JavaScript 模块(直到它们被使用,而不是在启动时)来提高启动时间。
此功能已经存在并被推荐了几年,作为一种选择加入的配置选项,在我们文档的性能部分中列出。我们现在默认情况下为新应用程序启用此选项,以帮助人们无需额外配置即可拥有快速的 React Native 应用程序。
内联 Require 是一种 Babel 转换,它获取模块导入并将其转换为内联。例如,内联 Require 将此模块导入调用从文件顶部转换为其使用位置。
之前
import {MyFunction} from 'my-module';
const MyComponent = props => {
const result = MyFunction();
return <Text>{result}</Text>;
};
之后
const MyComponent = props => {
const result = require('my-module').MyFunction();
return <Text>{result}</Text>;
};
有关内联 Require 的更多信息,请参阅性能文档。
在过去的一年中,Facebook 赞助了Major League Hacking 奖学金计划,支持对 React Native 的贡献。Jessie Nguyen 和Saphal Patro 添加了在使用 Hermes 时使用 Chrome DevTools 上的性能选项卡来可视化应用程序执行的功能。
有关更多信息,请查看新的文档页面。
我们已向 Hermes 添加了代理支持,从而与 react-native-firebase 和 mobx 等流行的社区项目兼容。如果您一直在使用这些软件包,您现在可以迁移到 Hermes 以用于您的项目。
我们计划在即将发布的版本中将 Hermes 设为 Android 的默认 JavaScript 引擎,因此我们正在努力解决人们在使用 Hermes 时遇到的剩余问题。如果仍然存在阻止您的应用程序采用 Hermes 的问题,请在Hermes GitHub 存储库上打开一个问题。
React 17 不包含面向开发人员的新功能或重大更改。对于 React Native 应用程序,主要更改是新的 JSX 转换,它使文件不再需要导入 React 即可使用 JSX。
有关 React 17 的更多信息,请访问React 博客。
感谢数百位帮助实现 0.64 的贡献者!0.64 更改日志包含此版本中包含的所有更改。
2020 年 5 月,Facebook 是第一家做出GAAD 承诺的公司,他们承诺将无障碍性作为 React Native 开源项目的核心部分。从 5 月份开始,Facebook 就一直在认真审查和记录 React Native 中的无障碍差距。到目前为止,差距分析已经发现了 90 个问题,所有这些问题都已转换为GitHub 问题。
总的来说,我们发现 React Native API 为无障碍性提供了强大的支持。但是,我们也发现许多核心组件尚未充分利用平台无障碍 API,并且缺少对某些平台特定功能的支持。
贡献者的热情和多样性始终在 React Native 的开发中发挥着至关重要的作用,而这些无障碍差距为现有和新的贡献者提供了绝佳的机会。如果您一直有兴趣为 React Native 做出贡献,我们鼓励您加入我们,共同使 React Native 变得更易于访问。
为了表彰贡献者的努力,当无障碍问题关闭并附加到拉取请求时,贡献者将从我们的社区经理那里获得 Twitter 上的认可。其拉取请求被接受到代码库中的贡献者将在我们 React Native 博客上的每月问题更新中得到重点介绍。
请加入我们,共同使 React Native 对每个人都更易于访问。
有兴趣解决需要更多努力的问题的贡献者应该访问改进 React Native 无障碍性的项目页面,以查看需要他们了解 React Native 的 GitHub 问题。
有兴趣更新 React Native 文档以反映正在关闭的无障碍差距的技术作家应该访问React Native 文档。
与任何可能能够提供帮助的人分享此计划!
关注 React Native 的 GAAD 承诺开源无障碍社区经理的Twitter 或Facebook,以了解最新进展。
去年,我们进行了用户访谈并发送了调查,以了解人们如何以及何时使用 React Native 文档。根据 24 次访谈和 3000 多份调查回复中收集的数据和指导,我们能够改进 React Native 的文档,我们很高兴今天与大家分享这些进展
Pressable
和 React Native 组件简介 文档。非常感谢所有参与访谈、调查和文档工作的人!你们的合作使这一切成为可能。
Facebook 的 React Native 团队遵循一些原则来指导我们如何优先处理 React Native 的工作。这些原则代表我们团队的具体情况,不一定代表 React Native 社区的每个利益相关者。我们在这里分享这些原则,是为了更加透明地说明我们的驱动力、我们如何做出决策以及我们如何集中精力。
我们对 React Native 的首要任务是 **满足人们对每个平台的期望**。这就是 React Native 渲染到平台原语的原因。我们重视原生外观和感觉,而不是跨平台的一致性。
例如,React Native 中的 TextInput 在 iOS 上渲染为 UITextField。这确保了与密码管理器和键盘控件的集成开箱即用。通过使用平台原语,React Native 应用程序也能够随着 Android 和 iOS 新版本的发布而保持设计和行为的最新状态。
为了匹配原生应用程序的外观和感觉,我们还必须匹配它们的性能。这就是我们集中精力进行最雄心勃勃的努力的地方。例如,Facebook 创建了 Hermes,一个为 Android 上的 React Native 从头开始构建的新 JavaScript 引擎。Hermes 显着改善了 React Native 应用程序的启动时间。我们还在进行重大的架构更改,这些更改优化了线程模型,并使 React Native 更易于与原生代码互操作。
Facebook 应用程序中的数百个屏幕都是使用 React Native 实现的。Facebook 应用程序被数十亿人在各种设备上使用。**这就是为什么** **我们投资于大规模中最具挑战性的问题。**
在我们的应用程序中部署 React Native 使我们能够识别在较小规模下不会遇到的问题。例如,Facebook 专注于提高从最新 iPhone 到许多旧版 Android 设备等广泛设备的性能。这种关注为我们的架构项目(如 Hermes、Fabric 和 TurboModules)提供了依据。
我们已经证明,React Native 也可以扩展到大型组织。当数百名开发人员在同一个应用程序上工作时,逐步采用是必须的。这就是为什么我们确保 React Native 可以一次采用一个屏幕。很快,我们将更进一步,并能够将现有原生屏幕的单个原生视图迁移到 React Native。
专注于大规模应用意味着我们的团队目前没有处理许多事情。例如,我们的团队不会推动 React Native 在行业中的采用。我们也没有积极构建针对我们在大规模应用中看不到的问题的解决方案。我们很自豪我们有 许多合作伙伴和核心贡献者 能够专注于社区中这些重要的领域。
优秀的用户体验是迭代创建的。**在运行的应用程序中查看代码更改的结果只需几秒钟**。React Native 的架构使其能够在开发过程中提供近乎即时的反馈。
我们经常听到团队说采用 React Native 显著提高了他们的开发速度。这些团队发现,开发过程中的即时反馈使得尝试不同的想法并在不需要为每次微小更改中断编码会话的情况下添加额外的润色变得更加容易。当我们对 React Native 进行更改时,我们确保保留开发人员体验的这一品质。
即时反馈并不是 React Native 提高开发速度的唯一方法。团队可以利用快速增长的优质开源软件包生态系统。团队还可以共享 Android、iOS 和 Web 之间的业务逻辑。这有助于他们更快地发布更新并减少平台团队之间的组织孤岛。
当我们在 2014 年推出 React Native 时,我们用我们的座右铭“一次学习,随处编写”来介绍它——我们的意思是任何地方。**开发人员应该能够接触到尽可能多的人,而不会受到设备型号或操作系统的限制。**
React Native 针对非常不同的平台,包括移动设备、桌面、Web、电视、VR、游戏机等等。我们希望能够在每个平台上提供丰富的体验,而不是要求开发人员为最低公分母构建。为此,我们专注于支持每个平台的独特功能。这从不同的输入机制(例如触摸、笔、鼠标)到 VR 中根本不同的消费体验(如 3D 环境)不等。
这一原则促使我们决定在跨平台的 C++ 中实现 React Native 的新核心架构,以促进跨平台的平等。我们还在改进针对其他平台维护者(如使用 Windows 和 macOS 的 Microsoft)的公共接口。我们努力使任何平台都能支持 React Native。
我们不相信在每个平台上部署完全相同的用户界面,我们相信 **使用相同的声明式编程模型来展现每个平台的独特功能**。我们的声明式编程模型是 React。
根据我们的经验,React 推广的单向数据流使应用程序更容易理解。我们更喜欢将屏幕表示为声明式组件的组合,而不是由命令式管理的视图。React 在 Web 上的成功以及新的原生 Android 和 iOS 框架的方向表明,行业也已经接受了声明式 UI。
React 推广了声明式用户界面。但是,仍然存在许多 React 处于独特地位可以解决的未解决问题。React Native 将继续在 React 的创新基础上构建,并保持在声明式用户界面运动的最前沿。