跳转至主要内容

React Native 0.62 发布公告,包含 Flipper

·5 分钟阅读
Rick Hanlon
Facebook React Native 核心团队

今天我们发布 React Native 0.62 版本,其中默认包含对 Flipper 的支持。

此版本在全球疫情期间发布。我们今天发布此版本是为了尊重数百位为此次发布做出贡献的贡献者的工作,并防止该版本落后 master 分支太远。请注意贡献者帮助解决问题的能力有所下降,并准备好在必要时延迟升级。

默认启用 Flipper

Flipper 是一款用于调试移动应用的开发者工具。它在 Android 和 iOS 社区中很受欢迎,在此版本中,我们为新的和现有的 React Native 应用默认启用了支持。

Screenshot of Flipper for React Native

Flipper 开箱即用提供以下功能

  • Metro 操作:直接从工具栏重新加载应用并触发 Dev 菜单。
  • 崩溃报告器:查看来自 Android 和 iOS 设备的崩溃报告。
  • React DevTools:将最新版本的 React DevTools 与您的所有其他工具一起使用。
  • 网络检查器:查看设备应用发出的所有网络请求。
  • Metro 和设备日志:查看、搜索和过滤来自 Metro 和设备的所有日志。
  • 原生布局检查器:查看和编辑 React Native 渲染器输出的原生布局。
  • 数据库和偏好设置检查器:查看和编辑设备数据库和偏好设置。

此外,由于 Flipper 是一个可扩展的平台,它提供了一个市场,可以从 NPM 中拉取插件,因此您可以发布和安装特定于您的工作流程的自定义插件。请在此处查看可用的插件 here

有关更多信息,请查看 Flipper 文档

新的暗黑模式功能

我们添加了一个新的 Appearance 模块,以提供对用户外观偏好设置的访问,例如他们喜欢的配色方案(浅色或深色)。

const colorScheme = Appearance.getColorScheme();
if (colorScheme === 'dark') {
// Use dark color scheme
}

我们还添加了一个 Hook 来订阅用户偏好设置的状态更新

import {Text, useColorScheme} from 'react-native';

const MyComponent = () => {
const colorScheme = useColorScheme();
return <Text>useColorScheme(): {colorScheme}</Text>;
};

有关更多信息,请参阅 AppearanceuseColorScheme 的文档。

将 Apple TV 迁移到 react-native-tvos

作为我们 精简核心工作 的一部分,为了使 Apple TV 与 React Native Windows 和 React Native macOS 等其他平台保持一致,我们已开始从核心代码中删除 Apple TV 特定代码。

展望未来,React Native 的 Apple TV 支持将在 react-native-community/react-native-tvos 以及相应的 react-native-tvos NPM 包中维护。这是主存储库的完整分支,仅包含支持 Apple TV 所需的更改。

react-native-tvos 的发布将基于 React Native 的公开发布版本。对于此 react-native 的 0.62 版本,请升级 Apple TV 项目以使用 react-native-tvos 0.62。

更多升级支持

当 0.61 发布时,社区引入了一个新的 升级助手 工具,以支持开发者升级到新版本的 React Native。升级助手提供了从您当前版本到目标版本的更改差异,使您可以查看特定升级需要进行的更改。

即使有了这个工具,升级时也会出现问题。今天,我们通过宣布 Upgrade-Support 来引入更多专门的升级支持。Upgrade Support 是一个 GitHub 问题跟踪器,用户可以在其中提交特定于将其项目升级的问题,以获得社区的帮助。

我们一直在努力改进升级体验,我们希望这些工具能够为用户提供他们所需的边缘案例支持,而这些边缘案例我们尚未涵盖。

其他改进

  • LogBox:我们正在添加新的 LogBox 错误和警告体验作为可选功能;要启用它,请将 require('react-native').unstable_enableLogBox() 添加到您的 index.js 文件中。
  • React DevTools v4:此更改包括升级到 最新的 React DevTools,它提供了显着的性能提升、改进的导航体验以及对 React Hooks 的完全支持。
  • 无障碍功能改进:我们对无障碍功能进行了改进,包括添加 accessibilityValueTouchables 上缺少的 props、onSlidingComplete 无障碍事件,并将 Switch 组件的默认 role 从 "button" 更改为 "switch"

重大更改

  • 移除 PropTypes:我们正在从核心组件中移除 propTypes,以减少 React Native 核心对应用大小的影响,并倾向于在编译时而不是运行时检查的静态类型系统。
  • 移除 accessibilityStates:我们 移除 了已弃用的 accessibilityStates 属性,转而使用新的 accessibilityState prop,这是一种语义更丰富的方式,供组件向无障碍服务描述有关其状态的信息。
  • TextInput 更改:我们从 TextInput 中移除了 onTextInput from TextInput,因为它不常见、不符合 W3C 标准且难以在 Fabric 中实现。我们还移除了未记录的 inputView prop 和 selectionState

弃用

  • AccessibilityInfo.fetch 已经弃用,但在此版本中,我们 添加了警告
  • 现在 需要 设置 useNativeDriver,以便将来支持切换默认值。
  • Animated 组件的 ref 现在是内部组件,并且 弃用getNode

感谢

感谢数百位帮助 0.62 版本成为可能的贡献者!

要查看所有更新,请查看 0.62 更新日志

React Native 0.61 发布公告,包含快速刷新

·3 分钟阅读
Dan Abramov
Facebook React 核心团队

我们很高兴宣布 React Native 0.61,其中包含我们称之为快速刷新的新重载体验。

快速刷新

当我们向 React Native 社区询问 常见的痛点 时,最主要的答案之一是“热重载”功能已损坏。它对于函数组件无法可靠地工作,经常无法更新屏幕,并且不能很好地应对拼写错误和错误。我们听说大多数人关闭了它,因为它太不可靠了。

在 React Native 0.61 中,我们将现有的“实时重载”(保存时重载)和“热重载”功能统一为一个名为“快速刷新”的新功能。快速刷新是从头开始实现的,遵循以下原则

  • 快速刷新完全支持现代 React,包括函数组件和 Hooks。
  • 快速刷新在拼写错误和其他错误后可以优雅地恢复,并在需要时回退到完全重载。
  • 快速刷新不执行侵入性代码转换,因此它足够可靠,可以默认启用。

要观看快速刷新的实际效果,请观看此视频

试用一下,让我们知道您的想法!如果您愿意,可以在 Dev 菜单(iOS 上为 Cmd+D,Android 上为 Cmd+M 或 Ctrl+M)中将其关闭。打开和关闭是即时的,因此您可以随时执行此操作。

以下是一些快速刷新技巧

  • 默认情况下,快速刷新会保留函数组件(和 Hooks!)中的 React 本地状态。
  • 如果您需要在每次编辑时重置 React 状态,则可以在包含该组件的文件中添加特殊的 // @refresh reset 注释。
  • 快速刷新始终重新挂载类组件,而不保留状态。这确保它可以可靠地工作。
  • 我们都会在代码中犯错误!快速刷新会在您保存文件后自动重试渲染。修复语法或运行时错误后,您无需手动重新加载应用。
  • 在编辑期间添加 console.logdebugger 语句是一种简洁的调试技术。

请在 GitHub 上报告有关快速刷新的任何问题,我们将进行调查。

其他改进

  • 修复 use_frameworks! CocoaPods 支持。 在 0.60 中,我们进行了一些更新以默认集成 CocoaPods。不幸的是,这破坏了使用 use_frameworks! 的构建。这已在 0.61 中修复,从而更容易将 React Native 集成到需要使用动态框架构建的 iOS 项目中。
  • 添加 useWindowDimensions Hook。 这个新的 Hook 自动提供和订阅尺寸更新,并且在大多数情况下可以代替 Dimensions API 使用。
  • React 已升级到 16.9。 此版本弃用了 UNSAFE_ 生命周期方法的旧名称,包含对 act 的改进等等。请参阅 React 16.9 博客文章,了解自动迁移脚本和更多信息。

重大更改

  • 移除 React .xcodeproj。 在 0.60 中,我们通过 CocoaPods 引入了自动链接支持。我们还将 CocoaPods 集成到 e2e 测试运行中,以便从现在开始,我们有一种统一的标准方法将 RN 集成到 iOS 应用中。这有效地弃用了 React .xcodeproj 支持,并且该文件已从 0.61 开始删除。注意:如果您已经使用 0.60 自动链接,则不应受到影响。

感谢

感谢所有帮助 0.61 版本成为可能的贡献者!

要查看所有更新,请查看 0.61 更新日志

认识 Hermes,一个新的为 React Native 优化的 JavaScript 引擎

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

上周在 Chain React 大会上,我们发布了 Hermes,这是我们在 Facebook 开发的开源 JavaScript 引擎。它是一个小巧轻便的 JavaScript 引擎,专为在 Android 上运行 React Native 而优化。 快来看看!

Hermes 通过减少内存使用、减小下载大小以及缩短应用变得可用或“可交互时间”(TTI) 来提高 React Native 性能。

“当我们分析性能数据时,我们注意到 JavaScript 引擎本身是启动性能和下载大小的重要因素。有了这些数据,我们知道我们必须优化 JavaScript 性能,使其更适应移动电话的受限环境,而不是桌面或笔记本电脑。在探索了其他选项之后,我们构建了一个新的 JavaScript 引擎,我们称之为 Hermes。它旨在提高应用性能,专注于我们的 React Native 应用,即使在内存有限、存储速度慢且计算能力降低的大众市场设备上也是如此。” —Hermes:专为移动应用优化的开源 JavaScript 引擎,从 React Native 开始

想立即开始使用吗?请务必 查看我们在文档中关于在您现有的 React Native 应用中启用 Hermes 的新指南

Hermes 和 React Native 徽标结合成有翼的愤怒,从一部孤独、发光的、据推测是 Android 手机的手机中,在崩溃的电暴中升起。 Rachel Nabors 插画

React Native 0.60 发布公告

·5 分钟阅读
Ryan Turner
核心维护者和 React Native 开发者

经过数百位贡献者数月的辛勤工作,React Native 核心团队自豪地宣布发布 0.60 版本。此版本处理了 Android 和 iOS 平台的重大迁移,并且还解决了许多问题。这篇博文涵盖了此版本的亮点。但与往常一样,请参阅更新日志以获取更详细的信息。最后,感谢各位贡献者帮助我们实现这一里程碑!

关注无障碍功能

无障碍 API 进行了许多改进,例如 announceForAccessibility,以及对 roles操作支持标志 等的改进。无障碍功能是一门复杂的科学,但我们希望这些改进能让 A11Y 更容易实现。请务必查看 React Native 开源更新 2019 年 6 月,了解这些更改的更多详细信息。

一个崭新的开始

React Native 的启动画面已更新!感谢许多帮助创建新 UI 的贡献者。这个新的“Hello World”将以更友好、更吸引人的方式欢迎用户进入生态系统。

The new init screen helps developers get started from the get-go with resources and a good example

AndroidX 支持

AndroidX 是 Android 生态系统向前迈出的重要一步,旧的支持库工件正在被弃用。对于 0.60 版本,React Native 已迁移到 AndroidX。这是一个重大更改,您的原生代码和依赖项也需要迁移

通过此更改,React Native 应用需要开始自己使用 AndroidX。它们不能在一个应用中并排使用,因此所有应用代码和依赖项代码都需要使用其中之一。

matt-oakesdiscussions-and-proposals

虽然您自己的原生代码需要您自己迁移,但 @mikehardy@cawfree@m4tt72 构建了一个 名为“jetifier”的智能工具 来修补您的 node_modules。库维护者将需要升级,但在他们发布 AndroidX 版本之前,此工具为您提供了一个临时解决方案。因此,如果您发现与 AndroidX 迁移相关的错误,请尝试一下。

默认启用 CocoaPods

CocoaPods 现在是 React Native iOS 项目的一部分。如果您尚未这样做,请务必从现在开始使用 xcworkspace 文件打开 iOS 平台代码(提示:尝试从根项目目录执行 xed ios)。此外,内部软件包的 podspec 已更改,使其与 Xcode 项目兼容,这将有助于故障排除和调试。在升级到 0.60 以引入此令人兴奋的支持时,预计会对您的 Podfile 进行 一些简单的更改。请注意,我们知道 use_frameworks! 存在兼容性问题,并且我们正在跟踪一个 问题,其中包含解决方法和未来的补丁。

精简核心移除

WebViewNetInfo 之前已提取到单独的存储库中,在 0.60 版本中,我们已完成将它们从 React Native 存储库中迁移出来。此外,为了响应社区对新 App Store 政策的反馈,Geolocation 也已被提取出来。如果您尚未完成迁移,请通过添加对 react-native-webview@react-native-community/netinfo@react-native-community/geolocation 的依赖项来完成迁移。如果您想要自动解决方案,请考虑使用 rn-upgrade-deprecated-modules。自提取以来,维护者已向这些存储库提交了 100 多个 commit,我们很高兴看到社区的支持!

原生模块现在已自动链接

致力于 React Native CLI 的团队对原生模块链接引入了重大改进,称为 自动链接!大多数情况下将不再需要使用 react-native link。同时,团队全面改进了链接过程。请务必 react-native unlink 如上述文档中所述的任何预先存在的依赖项。

升级助手

@lucasbento@pvinis@kelset@watadarkstar 构建了一个名为 升级助手 的出色工具,以简化升级过程。它可以帮助具有棕地应用或复杂自定义的 React Native 用户查看版本之间的更改。请查看 更新的升级文档,并立即试用它来了解您的升级路径!

Upgrade Helper cleanly and easily shows the changes needed to migrate to a different version of React Native

给库维护者的注意事项

AndroidX 的更改几乎肯定需要更新您的库,因此请务必尽快包含支持。如果您暂时无法升级,请考虑针对 jetifier 检查您的库,以确认用户可以在构建时修补您的库。

查看 自动链接 文档以更新您的配置和 readme。根据您之前集成库的方式,您可能还需要进行一些其他更改。查看 CLI 中的 依赖项 指南,了解如何定义您的依赖项接口。

感谢

虽然这些是我们指出的亮点,但还有许多其他令人兴奋的地方。要查看所有更新,请查看 更新日志。与往常一样,请继续关注更多新闻。同时享受 0.60 版本!

React Native 开源更新 2019 年 6 月

·8 分钟阅读
Christoph Nakazawa
Christoph Nakazawa
前 Facebook 工程师

代码和社区健康状况

在过去的六个月中,共有 550 多位贡献者向 React Native 提交了 2800 个 commit。来自社区的 400 位贡献者创建了超过 1,150 个 Pull Request,其中 820 个 Pull Request 已合并。

在过去的六个月中,平均每天的 Pull Request 数量已从三个增加到大约六个,即使我们通过精简核心工作将网站、CLI 和许多模块从 React Native 中分离出来也是如此。未处理的 pull request 的平均数量现在低于 25 个,我们通常会在数小时或数天内回复建议和评论。

有意义的社区贡献

我们想重点介绍一些我们认为很棒的最新贡献

精简核心

精简核心 的主要动机是将模块从 React Native 中拆分到单独的仓库中,以便它们可以获得更好的维护。 在短短六个月内,像 WebViewNetInfoAsyncStorage网站CLI 这样的仓库总共收到了 800 多个 Pull Request。 除了更好的维护之外,这些项目还可以比 React Native 本身更频繁地独立发布。

我们还借此机会从 React Native 本身中移除了过时的 polyfill 和遗留组件。 过去,polyfill 是必要的,以支持旧版本 JavaScriptCore (JSC) 中的 MapSet 等语言特性。 既然 React Native 附带了一个新版本,这些 polyfill 就被移除了。

这项工作仍在进行中,本地和 JavaScript 端还有更多东西需要拆分或移除,但早期迹象表明,我们设法扭转了表面积和应用大小不断增加的趋势: 例如,在查看 JavaScript 包时,大约一年前在 0.54 版本中,React Native JavaScript 包大小为 530kb,并在短短 6 个月内增长到 0.57 版本的 607kb(+77kb)。 现在我们看到主分支上的包大小减少了 28kb,降至 579kb,减少了 100kb 以上!

随着我们结束精简核心工作的第一次迭代,我们将努力更有意识地对待添加到 React Native 的新 API,我们将不断评估使 React Native 更小更快的途径,并寻找方法来授权社区拥有各种组件的所有权。

用户反馈

六个月前,我们询问社区 “您不喜欢 React Native 的哪些方面?”,这很好地概述了人们面临的问题。 我们 在几个月前回复了该帖子,现在是时候总结在首要问题上取得的进展了

  • 升级: React Native 社区团结一致,对升级体验进行了多项改进: 自动链接,通过 rn-diff-purge 改进的升级命令,升级助手网站(即将推出)。 我们还将确保通过为每个主要版本发布博客文章来传达重大更改和令人兴奋的新功能。 其中许多改进将使 0.60 版本之后的未来升级变得更加容易。
  • 支持/不确定性: 许多人对 Pull Request 缺乏活动以及 Facebook 对 React Native 的投资普遍不确定性感到沮丧。 正如我们在上面所展示的,我们可以自信地说,我们已准备好迎接更多的 Pull Request,并且我们热切期待您的提案和贡献!
  • 性能: React Native 0.59 附带了一个新的、速度更快的 JavaScriptCore (JSC) 版本。 另外,我们一直在努力使其更容易默认启用 inline-requires,并且在未来几个月内,我们将为您带来更多令人兴奋的更新。
  • 文档: 我们最近开始努力 全面检查和重写 React Native 的所有文档。 如果您希望做出贡献,我们很乐意获得您的帮助!
  • Xcode 中的警告: 我们 消除了所有现有的警告,并努力不引入新的警告。
  • 热重载: React 团队正在构建一个 新的热重载系统,该系统将很快集成到 React Native 中。

不幸的是,我们还无法改进所有方面

  • 调试: 我们修复了许多每天都遇到的不方便的错误和问题,但不幸的是,我们在这方面没有取得我们希望的那么大的进展。 我们认识到使用 React Native 进行调试并不理想,我们将在未来优先改进这一点。
  • Metro 符号链接: 不幸的是,我们尚未能够为此实施一个简单直接的解决方案。 但是,React Native 用户 分享了各种可能对您有用的解决方法

鉴于过去六个月的巨大变化,我们想再次问您同样的问题。 如果您正在使用最新版本的 React Native,并且您有想要提供反馈的内容,请在我们的新版 “您不喜欢 React Native 的哪些方面?” 中评论

持续集成

Facebook 首先将所有 Pull Request 和内部更改直接合并到 Facebook 的仓库中,然后将所有提交同步回 GitHub。 Facebook 的基础设施与常见的持续集成服务不同,并非所有开源测试都在 Facebook 内部运行。 这意味着同步到 GitHub 的提交经常会破坏开源中的测试,这需要花费大量时间来修复。

React Native 团队的 Héctor Ramos 在过去两个月中一直在改进 Facebook 和 GitHub 上的 React Native 持续集成系统。 现在,大多数开源测试都在更改提交到 Facebook 的 React Native 之前运行,这将使 GitHub 上的 CI 在同步提交时保持稳定。

下一步

请务必查看我们关于 React Native 未来的演讲! 在接下来的几个月中,Facebook 的 React Native 团队成员将在 Chain ReactReact Native EU 上发表演讲。 此外,请注意我们的下一个版本 0.60,它即将到来。 这将令人兴奋

React Native 在 F8 和开源播客

·3 分钟阅读
Christoph Nakazawa
Christoph Nakazawa
前 Facebook 工程师

本周,Eli WhiteF8 2019 上发表了关于 Facebook 的 Android 和 iOS 应用程序中的 React Native 的演讲。 我们很高兴分享我们在过去两年中所做的事情以及我们下一步要做的事情。

Facebook 的开发者网站 上查看视频

F8 Talk about React Native

演讲亮点:

  • 我们在 2017 年和 2018 年专注于 React Native 的最大产品 Facebook Marketplace。 我们与 Marketplace 团队合作,以提高产品质量并增加用户愉悦感。 目前,Marketplace 是 Facebook 应用中 Android 和 iOS 上质量最高的产品之一。
  • Marketplace 的性能也是一个很大的挑战,尤其是在中端 Android 设备上。 过去一年,我们将启动时间缩短了 50% 以上,并且还在不断改进! 最大的改进正在构建到 React Native 中,并将于今年晚些时候提供给社区。
  • 我们有信心可以使用 React Native 构建 Facebook 所需的高质量和高性能应用。 这种信心使我们能够在更大的赌注上进行投资,例如 重新思考 React Native 的核心
  • Microsoft 支持并将 React Native 用于 Windows,使人们能够使用他们的专业知识和代码库来渲染到 Microsoft 的通用 Windows 平台。 查看下周的 Microsoft Build,收听他们更多地谈论这一点

关于开源的 React Radio 播客

Eli 的演讲最后谈到了我们最近的开源工作。 我们在 3 月份更新了我们的进展,最近 Nader DabitGant Laborde 邀请 Christoph 在他们的播客 React Native Radio 上聊天,讨论 React Native 在开源中的应用。

播客亮点:

  • 我们讨论了 Facebook 的 React Native 团队如何看待开源,以及我们如何为一个像 React Native 规模 的项目构建可持续的社区。
  • 我们正在按计划移除多个模块,作为 精简核心 工作的一部分。 自 WebView 和 React Native CLI 等许多模块被提取以来,它们已经收到了 100 多个 Pull Request。
  • 接下来,我们将专注于全面检查 React Native 网站和文档。 敬请关注!

您很快就会在您最喜欢的播客应用中找到该剧集,或者您可以在此处收听录音

发布 React Native 0.59

·6 分钟阅读
Ryan Turner
核心维护者和 React Native 开发者

欢迎来到 React Native 的 0.59 版本! 这是另一个重大版本,包含 88 位贡献者的 644 次提交。 贡献也以其他形式出现,因此感谢您维护问题、培养社区和向人们传授有关 React Native 的知识。 本月带来了一些备受期待的更改,我们希望您喜欢它们。

🎣 Hooks 已到

React Hooks 是此版本的一部分,它使您可以跨组件重用有状态逻辑。 关于 hooks 有很多讨论,但是如果您还没有听说过,请查看下面的一些精彩资源

请务必在您的应用中尝试一下。 我们希望您会发现这种重用和我们一样令人兴奋。

📱 更新的 JSC 意味着性能提升和 Android 上的 64 位支持

React Native 使用 JSC (JavaScriptCore) 为您的应用程序提供支持。 Android 上的 JSC 已经有几年历史了,这意味着许多现代 JavaScript 功能不受支持。 更糟糕的是,与 iOS 的现代 JSC 相比,它的性能很差。 在此版本中,这一切都改变了。

感谢 @DanielZlotin@dulmandakh@gengjiawen@kmagiera@kudo 的一些出色工作,JSC 赶上了过去几年的发展。 这带来了 64 位支持、现代 JavaScript 支持和 巨大的性能改进。 感谢您也使这成为一个可维护的过程,以便我们可以利用未来的 WebKit 改进,而无需进行如此多的准备工作,并感谢 Software Mansion 和 Expo 使这项工作成为可能。

💨 通过内联 require 更快地启动应用

我们希望帮助人们默认拥有高性能的 React Native 应用,并且正在努力将 Facebook 的优化带给社区。 应用程序根据需要加载资源,而不是减慢启动速度。 此功能称为 “内联 require”,因为它使 Metro 能够识别要延迟加载的组件。 具有深入且多样化的组件架构的应用将看到最大的改进。

source of the metro.config.js file in the 0.59 template, demonstrating where to enable inlineRequires

我们需要社区让我们知道它的工作原理,然后我们才能默认启用它。 当您升级到 0.59 时,将有一个新的 metro.config.js 文件; 将选项翻转为 true,并向我们提供 您的反馈! 在 性能文档 中阅读有关内联 require 的更多信息,以基准测试您的应用。

🚅 精简核心正在进行中

React Native 是一个庞大而复杂的项目,带有一个复杂的仓库。 这使得代码库对贡献者来说不太容易接近,难以测试,并且作为开发依赖项而言过于臃肿。 精简核心 是我们通过将代码迁移到单独的库以进行更好管理来解决这些问题的努力。 过去的几个版本已经看到了这方面的初步步骤,但是 让我们认真起来

您可能会注意到,其他组件现在已正式弃用。 这是个好消息,因为现在这些功能有所有者积极维护它们。 注意警告消息,并将这些功能迁移到新的库,因为它们将在未来的版本中删除。 下面是一个表格,指示了组件、其状态以及您可以将您的使用迁移到哪里。

组件已弃用?新家
AsyncStorage0.59@react-native-community/react-native-async-storage
ImageStore0.59expo-file-systemreact-native-fs
MaskedViewIOS0.59@react-native-community/react-native-masked-view
NetInfo0.59@react-native-community/react-native-netinfo
Slider0.59@react-native-community/react-native-slider
ViewPagerAndroid0.59@react-native-community/react-native-viewpager

在接下来的几个月中,将会有更多组件遵循这条通往更精简核心的道路。 我们正在寻求帮助 — 前往 精简核心总括 来参与。

👩🏽‍💻 CLI 改进

React Native 的命令行工具是开发人员进入生态系统的入口点,但它们长期存在问题且缺乏官方支持。 CLI 工具已移至 新仓库,并且 专门的维护人员组 已经做出了一些令人兴奋的改进。

日志现在的格式更好了。 命令现在几乎立即运行 — 您会立即注意到差异

0.58&#39;s CLI is slow to start0.58&#39;s CLI is nearly instantaneous

🚀 升级到 0.59

我们听取了您关于 React Native 升级过程 的反馈,我们正在采取措施改进 未来版本 的体验。 要升级到 0.59,我们建议使用 rn-diff-purge 来确定您当前的 React Native 版本和 0.59 之间发生了哪些更改,然后手动应用这些更改。 将您的项目升级到 0.59 后,您将能够使用新改进的 react-native upgrade 命令(基于 rn-diff-purge!)升级到 0.60 及更高版本,因为更新的版本可用。

🔨 破坏性更改

0.59 中的 Android 支持已根据 Google 的最新建议进行了清理,这可能会导致现有应用程序的潜在破坏。 此问题可能会表现为运行时崩溃和一个消息 “您需要在此 Activity 中使用 Theme.AppCompat 主题(或后代)”。 我们建议更新项目的 AndroidManifest.xml 文件,确保 android:theme 值是 AppCompat 主题(例如 @style/Theme.AppCompat.Light.NoActionBar)。

react-native-git-upgrade 命令已在 0.59 中删除,取而代之的是新改进的 react-native upgrade 命令。

🤗 感谢

许多新的贡献者帮助 从 flow 类型启用原生代码生成解决 Xcode 警告 - 这些是学习 React Native 如何工作并为更大利益做出贡献的好方法。 谢谢! 请注意未来类似的 issue。

虽然这些是我们注意到的亮点,但还有许多其他令人兴奋的地方。 要查看所有更新,请查看 更新日志。 0.59 是一个巨大的版本 – 我们迫不及待地想让您试用它。

在今年余下的时间里,我们将推出更多改进。 敬请关注!

Ryan 和整个 React Native 核心团队

React Native 开源更新 2019 年 3 月

·5 分钟阅读
Christoph Nakazawa
Christoph Nakazawa
前 Facebook 工程师

在决定加大对 React Native 开源社区的投入后,我们在 2018 年第四季度宣布了我们的 React Native 开源路线图

对于我们的第一个里程碑,我们专注于识别和改进社区中最明显的方面。 我们的目标是减少未完成的 pull request、减少项目的表面积、识别主要用户问题并建立社区管理指南。

在过去的两个月中,我们取得的进展超出了我们的预期。 继续阅读以了解更多详情

Pull Request

为了建立一个健康的社区,我们必须对代码贡献做出快速响应。 在过去的几年中,我们降低了审查社区贡献的优先级,并积累了 280 个 pull request(2018 年 12 月)。 在第一个里程碑中,我们将未完成的 pull request 数量减少到约 65 个。 同时,每天打开的 pull request 平均数量从 3.5 个增加到 7 个,这意味着我们在过去三个月中处理了大约 600 个 pull request

我们合并了 近三分之二 并关闭了三分之一的 pull request。 如果它们已过时或质量低下,或者如果它们不必要地增加了项目的表面积,则会在未合并的情况下关闭它们。 大多数合并的 pull request 修复了错误、改进了跨平台奇偶校验或引入了新功能。 值得注意的贡献包括提高类型安全性和支持 AndroidX 的持续工作。

在 Facebook,我们从主分支运行 React Native,因此我们在所有更改进入 React Native 版本之前首先对其进行测试。 在所有合并的 pull request 中,只有六个引起了问题:四个仅影响内部开发,两个在候选发布状态中被发现。

更明显的社区贡献之一是 更新的 “RedBox” 屏幕。 这是社区如何使开发者体验更友好的一个很好的例子。

精简核心

React Native 目前具有非常广泛的表面积,其中许多未维护的抽象我们在 Facebook 上没有大量使用。 我们正在努力减少表面积,以使 React Native 更小,并允许社区更好地照顾 Facebook 上主要未使用的抽象。

在第一个里程碑中,我们请求社区帮助进行精简核心项目。 反响非常热烈,我们几乎无法跟上所有进展。 查看在一个月内完成的所有工作

我们最兴奋的是,维护者们已经积极投入,修复长期存在的问题,添加测试,并支持长期以来呼声很高的功能。这些模块获得的社区支持比以往在 React Native 内部时还要多,这表明这对社区来说是一个巨大的进步。例如,WebView 项目自提取以来收到了许多 pull request,而 CLI 现在由社区成员维护,并获得了急需的改进和修复。

主要用户问题

在 12 月,我们询问了社区他们不喜欢 React Native 的地方。我们汇总了回复,并回复了每一个问题。幸运的是,我们社区面临的许多问题也是 Facebook 面临的问题。在我们的下一个里程碑中,我们计划解决一些主要问题。

最受关注的问题之一是开发者升级到较新版本 React Native 的体验。不幸的是,这不是我们自己会遇到的问题,因为我们是从主分支运行 React Native 的。值得庆幸的是,社区成员已经挺身而出解决这个问题

0.59 版本发布

如果没有 React Native 社区的帮助,特别是 Mike GrabowskiLorenzo Sciandra 的帮助,我们将无法发布版本。我们希望改进发布管理流程,并计划从现在开始更多地参与其中

  • 我们将与社区成员合作,为每个主要版本创建一篇博文。
  • 当人们升级到新版本时,我们将在 CLI 中直接显示重大更改。
  • 我们将缩短发布版本所需的时间。我们正在探索增加自动化测试的方法,并制定改进的手动测试计划。

这些计划中的许多将纳入即将发布的 React Native 0.59 版本。0.59 版本将附带 React Hooks、Android 新的 64 位 JavaScriptCore 版本,以及许多性能和功能改进。目前它已作为候选版本发布,预计在未来两周内趋于稳定。

后续步骤

在接下来的两个月里,我们将继续管理 pull request 以保持进度,同时开始减少未解决的 GitHub issue 数量。我们将通过精简核心项目继续减少 React Native 的表面积。我们计划解决社区最关注的 5 个问题。当我们最终确定社区指南时,我们将把注意力转向我们的网站和文档。

我们非常高兴能在三月份在 Facebook 伦敦接待来自社区的十多位贡献者,以帮助推动这些工作。我们很高兴您正在使用 React Native,并希望您能在 2019 年看到和感受到我们正在进行的改进。我们将在几个月后再次更新,并且在此期间会合并您的 pull request! ⚛️✌️

2018 年 React Native 社区状况

·4 分钟阅读
Lorenzo Sciandra
核心维护者和 React Native 开发者

2018 年,React Native 社区对我们开发和沟通 React Native 的方式进行了一些更改。我们相信,几年后,当我们回顾过去时,会发现这种转变是 React Native 的转折点。

很多人对 React Native 架构的重写感到兴奋,它被广泛称为 Fabric。 除此之外,这将修复 React Native 架构中的基本限制,并为 React Native 未来的成功奠定基础,同时还有 JSI 和 TurboModules

2018 年最大的转变是赋予 React Native 社区权力。从一开始,Facebook 就鼓励来自世界各地的开发者参与 React Native 的开源项目。从那时起,许多核心贡献者涌现出来,负责处理包括发布流程在内的事务。

这些成员采取了一些实质性步骤,通过以下资源使整个社区更有能力塑造该项目的未来

react-native-releases 📬

这个仓库于 1 月份创建,具有双重目的:允许每个人以更协作的方式跟进新版本,并为任何想要建议 cherry-pick 的人(例如 0.57.8 及其所有先前版本)开启关于某个版本将包含哪些内容的对话。

这是推动我们摆脱每月发布周期,以及目前用于 0.57.x 版本的“长期支持”方法的驱动力。

达到这些决定的一半功劳归功于今年创建的另一个仓库

discussions-and-proposals 🗣

这个仓库于 7 月份创建,扩展了关于 React Native 对话更开放环境的想法。 以前,这种需求是通过主仓库中标记为 For Discussion 的 issue 来处理的,但我们希望将此策略扩展到其他库(例如 React)拥有的 RFC 方法。

这个实验立即在 React Native 生命周期中找到了自己的角色。Facebook 团队现在正在使用社区 RFC 流程来讨论 React Native 中可以改进的地方,并协调围绕 精简核心项目 的工作 - 以及其他有趣的讨论。

@ReactNativeComm 🐣

我们意识到,我们沟通这些工作的方式并没有我们希望的那么有效,为了让大家更容易跟上 React Native 社区中发生的一切(从发布到活跃讨论),我们创建了一个新的 Twitter 帐户,您可以依赖它 @ReactNativeComm

如果您不使用该社交网络,请记住您始终可以通过 GitHub 关注仓库;此功能在过去几个月中得到了改进,可以仅针对发布版本接收通知,因此您应该考虑使用它。

未来的展望 🎓

在过去的 7-8 个月中,核心贡献者增强了 React Native Community GitHub 组织,以便在 React Native 的开发中承担更多所有权,并加强与 Facebook 的协作。但这始终缺乏类似项目可能具备的正式结构。

该组织可以为更大的开发者社区中的每个人树立榜样,为其中托管的所有软件包/仓库强制执行一套标准,为维护者提供一个互相帮助和贡献符合社区一致标准的高质量代码的统一场所。

在 2019 年初,我们将制定这套新的指导方针。请在专门的讨论中告诉我们您的想法。

我们相信,通过这些改变,社区将变得更加协作,以便当我们达到 1.0 版本时,我们都将继续通过利用这种共同努力来编写(更多)出色的应用程序 🤗


我希望您和我们一样对这个社区的未来感到兴奋。我们很高兴看到你们所有人都参与到上面列出的仓库中发生的对话中,或者通过你们将产生的出色代码参与其中。

编码愉快!