- 本文为 Marno 原创,转载必须保留出处!
- 公众号【 Marno 】,关注后回复 RN 加入交流群,等你来!
- React Native 优秀开源项目大全:www.marno.cn
导读
很久没有翻译过更新日志了,主要我确实抽不出这么多的时间来。翻译更新日志是非常消耗时间的一件事。之前我在翻译的时候,基本上会把所有更新内容都看一遍,不只是列表里的内容,而是每个 commit 详情内容都会看。有时候如果更新内容特别多,加上我只有晚上下班后才有时间,所以一篇更新日志就差不多得一周的时间才能翻译完。
之所以这么认真,是我觉得这是一件有意义的事情,更新日志对于关注和使用 RN 的人来说还是挺重要的,不过最开始做的时候,主要还是因为我也用得着,反正都看了,就顺便翻译了好了,说不定还有人会看。而且众所周知的原因,如果不仔细研究下到底更新了什么,就贸然升级版本,那种感受…真的很心累!
划重点
- 加强核心组件对 Flow type 的使用
- ScrollView,CameraRollView 和 SwipeableRow 发生重大变更,在调用某些方法时,不再绑定组件实例
- WebKit 支持双向 TLS 验证
- 从 /assets 之外的目录提供资源
- 修复大量奔溃,以及解决了一些意外
新增
通用
- 增加 publicPath 属性,以支持从不同的位置加载静态 assets
Android
-
Bundler 服务支持 Android 系统级属性 ,使在多个 App 间调试程序变得更加简单
-
Native Modules 现在支持在调用 promise.reject 的时候添加一个 WritableMap 类型的额外参数 (userInfo)。具体可以查看 Promise.java 中的实现方法。然后在 JavaScript 中可以通过 Error.userInfo 的方式获取这个参数。iOS 已经实现该功能。
-
Native Modules 现在将 nativeStackAndroid 属性暴露给使用 Exception / Throwable 拒绝的promise, 使 Javascript 可以通过 Error.nativeStackAndroid 显示 Native 的错误堆栈信息。iOS 可以参考 Error.nativeStackIOS。
iOS
- 将 moduleForName: lazilyLoadIfNecessary 添加到 RCTBridge.h 中,以便按名称查找模块并强制加载它们。以及其它对 LazyLoading 大量的改进。
- 为 WebView 增加 setClientAuthenticationCredential 方法,以便于在开启 WebKit={true} 时进行双向TLS身份验证
修改
通用
- 加强核心组件对 Flow type 的使用
- 大量公共组件都转换为 ES6 类( ScrollView,CameraRollView,SwipeableRow,ProgressBarAndroid,ProgressViewIOS,SegmentedControllIOS,ToolbarAndroid)
- Flow 版本升级为 v0.86.0
- metro 版本升级为 v0.49.1
- jest 版本升级为 v24.0.0-alpha.6
- fbjs-scripts 版本升级为 v1.0.0
- folly 版本升级为 v2018.10.22.00
- 同步 React 版本为 16.6.1
- 在 Hot Reloding 时清除错误消息(上周五试用了 0.58 后发现 reloading 有时候会失效,可能是这里出现了 bug)
- CxxModules 的方法中可以添加两个 callback 函数了
重大变化
已经转换为 ES6 组件类中,有些公有方法不再绑定该组件的实例。受此影响的方法有:
在 ScrollView 中:setNativeProps / getScrollResponder / getScrollableNode / getInnerViewNode / scrollTo / scrollToEnd / scrollWithoutAnimationTo / flashScrollIndicators。
在 CameraRollView 中:rendererChanged。
在 SwipeableRow 中:close。
因此,在方法中通过引用这些方法这些方法当做引用通过引用将这些方法作为回调传递给函数已不再安全。组件实例的自动绑定方法是createReactClass的一种行为,我们决定在切换到ES6类时不保留这种行为。
Android
- 优化 PlatformConstants.ServerHost, PlatformConstants.isTesting 和 PlatformConstants.androidID 的性能
iOS
- 将 RCTLogWarn() 改为 RCTLogInfo()
移除
- 移除 UIManager.measureViewsInRect(),因为已经很久没有人用它了
修复
- 修复 Yoga JNI bindings 中潜在的可能导致 UI 线程停滞的问题
- 修复在 cxx module 注册时因 race condition 导致的 crash
- View 和 Text 的 displayName 返回明确的名字
- 修复 CLI 执行
react-native init --help
返回 undefined 的问题 - 修复 CLI 执行
react-native start
时不识别 --sourceExts - 修复 Modal 的 visible 属性为 undefined 或 null 是仍会意外弹出
- 修复 VirtualizedList 加载分页数据时的崩溃
- 修复在调试模式下及计算差异 bundle 时,移除一个 module 导致错误堆栈信息的问题
Android
- 修复移除 root nodes 时导致的崩溃
- 修复 ReactInstanceManager 中多个 deadlocks 和 race conditions 问题
- 修复 ReactModalHostView 和 DialogManager 在 dismissing 时出现的 IllegalArgumentException
- 修复因使用 Android Gradle Plugin 3.2 而导致不能正确的合并资源路径
- 修复 HTTP 连接 ontimeout 回调的问题
- 当远程服务器开始关闭时,正确的将 websocket 关闭
- 修复 Android SDK16 设备的兼容性问题
- Image.resizeMode 不再默认为 ScaleType.CENTER,会导致多余的 padding
- 修复 Android SDK28 上反向的 ScrollView 不能朝正确方向滚动的问题
iOS
- 修复某些情况下 inline view 没有重新开始的问题
- 修复使用前置摄像头导致 ImagePickerIOS 预览和渲染图像不一致的问题
- 修复 iOS11 及之前的版本上关闭 JSC 时的 race conditions 和 crash
- 修复 NetInfo 中 _firstTimeReachability 导致的崩溃
- 修复 inline view 不能正确隐藏的问题
- 修复 ScrollView 的 offsets 直接引用内容 offsets 导致的奔溃
推荐阅读: