React Native Open Source Update June 2019
](http://facebook.github.io/react-native/blog/2019/06/12/react-native-open-source-update)
2019年6月12日
代码和社区健康
在过去六个月中,共有超过550名贡献者向React Native提交了2800份提交内容。来自社区的400名贡献者创建了1,150多个Pull请求,其中820个Pull请求被合并。
尽管我们通过精益核心工作将网站,CLI和许多模块从React Native中分离出来,但过去六个月中每天平均拉取请求数从3个增加到大约6个。平均拉开请求数量现在低于25,我们通常会在数小时或数天内回复建议和评论。
有意义的社区贡献
我们想强调一些我们认为很棒的最近的贡献:
-
可访问性: React Native 0.60将在Android和iOS上对可访问性API进行许多改进。所有新功能都直接使用底层平台提供的API,因此它们将与Android和iOS上的本机辅助技术集成。我们要感谢马克·马尔卡希,阿兰·凯尼恩,Estevão卢卡斯,萨姆·马蒂亚斯Weggersen和亚尼奇Duplessis的贡献:
- 其他辅助功能角色+状态和新的辅助功能状态API。为各种组件添加了许多缺少的可访问性角色,并为将来的Web支持提供了新的API。
- AccessibilityInfo.announceForAccessibility。添加了对Android的支持,以前只支持iOS。
- 扩展的辅助功能操作支持。添加了回调以处理围绕用户定义的操作的可访问性。
- 支持iOS Accessibility标志并支持“reduce motion”。
-
Android键盘辅助功能改进。添加了一个
clickable
prop和一个onClick
回调函数,用于通过键盘导航调用操作(注意:这将很快重命名为focusable
)。 - 使用CALayers绘制文本。修复了在iOS上使放大的文本消失的问题。
-
新应用程序屏幕:社区为新应用程序屏幕设计了一个在0.60中实现的设计。这个屏幕是大多数人第一次使用React Native时看到的。它现在将第一次用户链接到文档,并且外观适合我们即将进行的网站重新设计🌟。非常感谢Orta,Adam Shurson,Glauber Castro,Karan Singh,Eli Perkins,Lucas Bento和Eric Lewis的所有工作和合作!
- 查看“* React Native Show ”*视频系列中的新应用程序屏幕。
- TurboModule类型:新的TurboModules系统需要所有本机模块的类型,以保证本机的类型安全操作。在短短两周多的时间里,社区发送了~40个Pull请求来完成流式类型本机模块的这项工作。除了上面已经提到的人,我们要感谢米哈尔Chudziak,米哈尔Pierzchała,WOJTEK Szafraniec,并让Regisser和其他人谁送一个或多个引入请求。
- 加速:自2015年以来,React Native使用了“仓促”模块系统,该系统允许仅通过全局id而不是相对路径导入模块,这种路径很方便,但很多工具都不能很好地支持。James Ide建议删除匆忙,类似于多年前React删除的方式。他通过一项总括任务计划了所有的工作,并发送了18份Pull请求来实现这一目标!查看他的Twitter主题以了解更多信息。
- Android片段: John Shelley关于通过Android Fragments制作React Native工作的提议已合并,将在0.61中提供。在此处阅读有关Android Fragments的更多信息。
精益核心
精益核心的主要动机是将React Native中的模块拆分为单独的存储库,以便它们可以获得更好的维护。在短短六个月的存储库中,如WebView,NetInfo,AsyncStorage,网站和CLI共收到800多个Pull Requests。除了更好的维护之外,这些项目还可以比React Native本身更频繁地独立发布。
我们还借此机会从React Native本身删除过时的polyfill和遗留组件。Polyfills过去支持类似的语言功能是必要的Map
和Set
旧版本的JavaScriptCore的(JSC)的。现在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社区团结一致,对升级体验进行了多次改进:autolinking,一个更好的升级命令,通过rn-diff-purge,一个升级助手网站(即将推出)。我们还将确保通过发布每个主要版本的博客帖子来传达重大变化和激动人心的新功能。其中许多改进将使未来升级超过0.60版本变得更加容易。
- 支持/不确定性:许多人对Pull Requests缺乏活动以及Facebook对React Native的投资存在普遍不确定性感到沮丧。正如我们上面所示,我们可以自信地说,我们已准备好接受更多的Pull请求,我们热切期待您的建议和贡献!
- 性能: React Native 0.59附带了一个新的,速度更快的JavaScriptCore(JSC)版本。另外,我们一直在努力使默认情况下更容易启用内联需求,并在接下来的几个月内为您提供更多令人兴奋的更新。
- 文档:我们最近开始努力检修和重写所有React Native的文档。如果您想要贡献,我们很乐意得到您的帮助!
- Xcode中的警告:我们摆脱了所有现有的警告,并且正努力不引入新的警告。
- 热重新加载: React团队正在构建一个新的热重装系统,很快将集成到React Native中。
不幸的是,我们还没能改善一切:
- 调试:我们修复了许多不方便的错误并发布了我们每天都遇到的人,但不幸的是我们没有像我们希望的那样取得这么大的进展。我们认识到使用React Native进行调试并不是很好,我们将在未来优先考虑改进它。
- Metro符号链接:遗憾的是,我们还没有能够为此实现简单直接的解决方案。但是,React Native用户共享了可能适合您的各种变通方法。
鉴于过去六个月的大量变化,我们想再次问你同样的问题。如果您使用的是最新版本的React Native,并且您想提供反馈意见,请评论我们的新版“您对React Native有什么不满?”
持续集成
Facebook首先将所有Pull请求和内部更改直接合并到Facebook的存储库中,然后将所有提交同步回GitHub。Facebook的基础设施与常见的持续集成服务不同,并非所有开源测试都在Facebook内部运行。这意味着同步到GitHub的提交经常在开源中破坏测试,这需要花费大量时间来修复。
赫克托·拉莫斯从阵营本地团队花了近两个月来提高本土作出反应的无论是在Facebook和GitHub上的持续集成系统。大多数开源测试现在都在将更改提交到Facebook上的React Native之前运行,这将在提交同步时保持CI在GitHub上稳定。
下一个
请务必查看我们关于React Native未来的演讲!在接下来的几个月里,Facebook的React Native团队成员将在Chain React和React Native EU发表演讲。另外,请注意我们的下一个版本0.60,它就在附近。这将是令人兴奋的 ✨