跳到主要内容

51 篇帖子被标记为“announcement”

查看所有标签

React Native 的多平台愿景

·8 分钟阅读
Christine Abernathy
Christine Abernathy
Meta 开发者布道师
Eli White
Eli White
Meta 软件工程师
Luna Wei
Luna Wei
Meta 软件工程师
Timothy Yung
Timothy Yung
Meta 软件工程师

React Native 在提高移动开发的标准方面非常成功,无论是在 Facebook 还是在行业内的其他地方。随着我们以新的方式与计算机互动以及新设备的发明,我们希望 React Native 能够为每个人服务。虽然 React Native 最初是为构建移动应用而创建的,但我们相信,关注多个平台并根据每个平台的优势和约束进行构建具有共生效应。当我们将这项技术扩展到桌面和虚拟现实时,我们看到了巨大的好处,我们很高兴与大家分享这对 React Native 的未来意味着什么。

React Native 在 2021 年下半年

·6 分钟阅读
Luna Wei
Luna Wei
Meta 软件工程师

在过去的一年里,我们的世界发生了如此多的变化,React Native 也不例外。我们欢迎新成员加入我们的团队(我们很高兴最终能与他们面对面会面!),我们的项目已经成熟,新的机遇也随之而来。我们很高兴在这篇文章和未来的文章中与您分享这一切!

在 Facebook,我们的团队以半年为周期工作。每半年我们都会回顾我们的战略,制定计划,并在内部分享。今天,我们想与您,我们的社区,分享我们下半年的计划。

2021 年下半年对 React Native 来说是令人兴奋的半年。我们的重点领域包括培育社区、开始将新架构推广到开源,以及推动技术向前发展。

宣布 React Native 0.65

·3 分钟阅读
Luna Wei
Luna Wei
Meta 软件工程师

今天我们发布了 React Native 0.65 版本,其中包含新版本的 Hermes、无障碍功能改进、软件包升级等。

Hermes 0.8 中的新功能?

Hermes,Facebook 为 React Native 优化的开源 JavaScript VM,已升级到 0.8.1 版本。此版本中的一些突出功能是

您可以在此处找到完整的 Hermes 更改日志

按照此处的步骤选择加入您的应用以使用 Hermes(如果您尚未这样做),以利用这些新功能和优势!

无障碍功能修复和添加

去年,Facebook 承诺 GAAD,以改进 React Native 中的无障碍功能。0.65 分享了此承诺的结果和其他无障碍功能的胜利!一些值得注意的更改包括

  • 允许指定 iOS 的高对比度亮色和暗色值。有关更多详细信息,请参阅文档
  • 在 Android 上添加了 getRecommendedTimeoutMillis API。这公开了用户在 Android 的无障碍选项中设置的首选默认超时值,适用于可能需要额外时间来查看或访问控件等的用户。
  • 常规修复,以确保 TalkBack/VoiceOver 正确宣布 UI 状态,例如组件上的 disabledunselected

您可以在此处关注或贡献我们的未解决的无障碍功能问题

值得注意的依赖项版本更新和注意事项

  • 现在需要在 package.json 中将 react-native-codegen 版本 0.0.7 作为 devDependency
  • JCenter 已被淘汰,现在是只读的。我们已删除 JCenter 作为 maven 存储库,并更新了依赖项以使用 MavenCentral 和 Jitpack。
  • 将 OkHttp 从 v3 升级到 v4.9.1。有关更改的更多详细信息,请参阅升级到 OkHttp 4
  • 升级到 Flipper 0.93 以支持 Xcode 12.5。有关详细信息,请参阅此处的 Flipper 更改日志
  • Android Gradle Plugin 7 支持
  • Apple Silicon 需要链接器解决方法。有关详细信息,请参阅@mikehardy 的说明

谢谢!

此版本包含来自 61 位贡献者的超过 1100 次提交。感谢所有为此次发布做出贡献和支持的人!您可以在此处找到完整的更改日志

GAAD 承诺 - 一年后

·4 分钟阅读
Alexandra Marlette
Alexandra Marlette
React Native GAAD 承诺开源无障碍社区经理

自从 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 无障碍功能做出了贡献。

GAAD 承诺 - 三月份无障碍问题更新

·3 分钟阅读
Alexandra Marlette
Alexandra Marlette
React Native GAAD 承诺开源无障碍社区经理

自从我们向 GitHub 社区发布经过全面审查的差距分析和问题列表以改进 React Native 的无障碍功能以来,已经过去了四个星期。在 React Native 社区的帮助下,我们在改进无障碍功能方面已经取得了巨大进展。社区成员一直在帮助贡献者、审查测试,并提请注意之前的无障碍功能问题。自 3 月 8 日以来,社区已关闭六个问题,其中四个拉取请求和七个其他拉取请求正在等待审查。

在这项工作继续进行的同时,Facebook 的 React Native 和无障碍功能团队正在评估在此倡议之前提交的无障碍功能错误和问题,以确定它们是否已包含在我们当前的差距分析中,或者是否存在需要引入项目中的其他问题。已经发现了一个新问题并将其移入项目中,其他四个问题直接映射到现有问题,预计其他两个问题将通过解决解决其根本原因的现有问题来关闭。

感谢所有参与的社区成员。你们真正在推动使 React Native 对每个人都更易访问!

宣布 React Native 0.64,在 iOS 上支持 Hermes

·4 分钟阅读
Mike Grabowski
Mike Grabowski
Callstack CTO 和联合创始人

今天我们发布了 React Native 0.64,它附带了对 iOS 上 Hermes 的支持。

iOS 上的 Hermes 选择加入

Hermes 是一个开源 JavaScript 引擎,经过优化可运行 React Native。它通过减少内存使用量、减少下载大小和减少应用变得可用或“可交互时间”(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 支持仍处于早期阶段。我们将其保留为选择加入,因为我们正在进行进一步的基准测试。我们鼓励您在自己的应用程序上试用它,并告知我们它的运行情况!

默认启用内联要求

内联要求是一个 Metro 配置选项,它通过延迟 JavaScript 模块的执行直到它们被使用时(而不是在启动时)来改善启动时间。

此功能已经存在并被推荐作为可选配置选项几年了,列在我们文档的性能部分中。我们现在默认对新应用程序启用此选项,以帮助人们拥有快速的 React Native 应用程序,而无需额外的配置。

内联要求是一个 Babel 转换,它接受模块导入并将其转换为内联。例如,内联要求将此模块导入调用从文件顶部转换为其使用位置。

之前

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>;
};

有关内联要求的更多信息,请参阅性能文档

使用 Chrome 查看 Hermes 跟踪

在过去的一年中,Facebook 赞助了Major League Hacking fellowship,支持对 React Native 的贡献。Jessie NguyenSaphal Patro 添加了使用 Chrome DevTools 上的 Performance 选项卡可视化您的应用程序在使用 Hermes 时的执行情况的功能。

有关更多信息,请查看新的文档页面

支持代理的 Hermes

我们已将代理支持添加到 Hermes,从而实现了与流行的社区项目(如 react-native-firebase 和 mobx)的兼容性。如果您一直在使用这些软件包,您现在可以将您的项目迁移到 Hermes。

我们计划在即将发布的版本中使 Hermes 成为 Android 的默认 JavaScript 引擎,因此我们正在努力解决人们在使用 Hermes 时遇到的剩余问题。如果您的应用程序采用 Hermes 仍然存在问题,请在 Hermes GitHub 存储库上打开一个问题。

React 17

React 17 不包括面向开发人员的新功能或重大突破性更改。对于 React Native 应用程序,主要更改是新的 JSX 转换,使文件不再需要导入 React 即可使用 JSX。

有关 React 17 的更多信息,请访问React 博客

主要依赖项版本更改

  • 已删除 Android API 级别 16-20。Facebook 应用程序始终会删除对使用率足够低的 Android 版本的支持。由于 Facebook 应用程序不再支持这些版本,并且是 React Native 的主要测试平台,因此 React Native 也将删除支持。
  • 需要 Xcode 12 和 CocoaPods 1.10
  • 最低 Node 支持从 10 提升到 Node 12
  • Flipper 提升到 0.75.1

感谢

感谢数百位贡献者,他们使 0.64 成为可能!0.64 更改日志包括此版本中包含的所有更改。

GAAD 承诺 - 改进 React Native 无障碍功能

·2 分钟阅读
Alexandra Marlette
Alexandra Marlette
React Native GAAD 承诺开源无障碍社区经理

您好,React Native 社区,

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 文档更新

·3 分钟阅读
Rachel Nabors
Facebook 文档工程师

去年,我们进行了用户访谈并发送了一项调查,以了解更多关于人们如何以及何时使用 React Native 文档的信息。通过从 24 次访谈和 3000 多份调查回复中收集的数据和指导,我们能够努力改进 React Native 的文档,并且我们很高兴今天分享这一进展

非常感谢所有参与访谈、调查和我们的文档工作的人!您的合作使这一切成为可能。

React Native 团队原则

·5 分钟阅读
Eli White
Eli White
Meta 软件工程师

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。我们努力使任何平台都能够支持 React Native。

声明式 UI

我们不相信在每个平台上部署完全相同的用户界面,我们相信使用相同的声明式编程模型来展现每个平台的独特功能。我们的声明式编程模型是 React。

根据我们的经验,React 推广的单向数据流使应用程序更容易理解。我们更倾向于将屏幕表达为声明式组件的组合,而不是命令式管理的视图。React 在 Web 上的成功以及新的原生 Android 和 iOS 框架的方向表明,行业也已经接受了声明式 UI。

React 普及了声明式用户界面。然而,仍然存在许多 React 独特定位可以解决的未解决问题。React Native 将继续在 React 的创新基础上发展,并保持在声明式用户界面运动的最前沿。