React Native 0.45 正式版发布
2017-06-18 by Marno

本文为【Marno】翻译,原文地址:https://github.com/facebook/react-native/releases
从0.18开始,RN默认项目全面转向ES6,语法大变化,请参考此贴学习 http://bbs.reactnative.cn/topic/15/
如何升级现有项目的RN版本?

一、重大变化


  • 移除从 ‘react-native’ 中导入 React 的错误警告

从 ‘react-native’ 中导入 react 模块早在 0.25 的版本中被比标记为过期,现在如果再继续这样导入会直接报错。

  • 更新 podspecs ,使其支持并且默认使用 C++ bridge(iOS)

如果你正在使用 Cocoapods, 你必须更新你的 Podfile ,给其中的 React subspec 添加 ‘BatchedBridge’ 或 ‘CxxBridge’ 的依赖。

二、新特性


Android平台

  • 在 YOGA 中向 java 提供 setPointScaleFactor() 方法
  • 向 Java 提供打印方法
  • 在 CameraRoll 中允许显示手机中的视频
  • 在 DevServerHelper 中添加 symbolication 支持
  • 将 openStackFrameCall 添加到 DevServerHelper
  • 在 ReactRootView 添加 appProperty
  • 在启动期间提高 RN 线程的优先级
  • 如果 UIBackground 线程可用,则在 UIBackground 线程中进行断言
  • 添加标记用来测试在 native 模块线程以外的独立线程中运行 BG UI 操作
  • 添加明确的错误信息当 e.getMessage 为空时
  • 重构 interfaces
  • 提供了创建后台 UI 线程的能力
  • 添加了更多的 systraces
  • 用 try/finally 将 CREATE_MODULE 和 INITIALIZE_MODULE markers 包裹起来
  • 不在 UI 线程运行 setupReactContext()
  • 在使用完 DraweeControllerBuilder 后进行清除
  • 启动从 ASyncTask 到 Thread 的转换
  • 降低 native 模块和 JS 线程的线程优先级

iOS平台

  • 使用 CameraRoll 可以显示手机中的视频了
  • 在 iOS 中会提示更多的 verbose 级别的错误信息
  • 添加重置 CxxModuleWrapper's 模块指针的 API
  • 从树中移除 RCTBatchedBridge rule 以及所有的使用
  • Split off websocket related items to RCTPackagerConnection
  • 从 RCTRootView 初始化时立即触发 renderApplication 方法
  • Native 动画 - 在 iOS 上支持 decay 动画
  • Port perf metrics used in RCTBatchedBridge
  • 在 iOS 的 native 模块中添加了对同步方法的支持
  • 在 RCTShadowView 中采用 Yoga's YGConfig
  • 清除 Xcode 项目中对 UIExplorer 的引用
  • 将 Merge RCTPackagerClient 合并到 RCTPackagerConnection 中
  • 从 Xcode 项目中移除对 RCTPackagerClientResponder 的引用
  • 引入 RCTAssertUIManagerQueue()
  • 引入 RCTUIManagerObserverCoordinator ,一种新方式订阅来自 UIManager 的粒度通知
  • 当载入脚本失败时抛出异常
  • 从 NetworkingModule 中移除对 WebWorker 的支持
  • 从 Timers 中移除对 WebWorker 的支持
  • 放弃对 WebWorkers 的支持
  • 避免在正在关闭的 view controller 上显示其他控件(Alert 和 Modal 的问题)
  • 在 Redbox 中提示列表嵌套异常
  • 对 Apple TV 的支持: 为 ART library 添加在 tvOS 上的构建支持
  • 通过 bridge 暴露 shake-to-show dev menu 设置
  • 在 tvOS 模拟器中启用 dev menu

iOS / Android 通用

  • 当组件组件卸载时需要将 TouchableHighlight 的 _isMounted 设置为 false
  • 自定义 build 配置: 移动 transform 配置到自己的属性中
  • 修复误报 isMounted() 方法过期的警告
  • CLI: Stronger typing for transformers
  • CLI: Disable no-alert eslint rule for node code
  • CLI:去掉 Config 中的 FBism
  • CLI: 在 callsite 中解析路径而不是在 Config.loadFile 中
  • CLI: 修复 Promise 解决回掉错误
  • 修复 <TextInput> 组件多行模式时候默认占位文字的颜色
  • Allow calling NativeViewHierarchyManager.addRootView() off the UI thread
  • FlatList: 使用 $ReadOnlyArray 来代替 SectionList 中的 Array 来保存 SectionItemT
  • FlatList: 将 section key 变为可选参数
  • FlatList: 多项改进
  • FlatList: 优化 VirtualizedList 进行更新的触发机制
  • FlatList: 将 getItem 和 getItemCount 设置为必须属性 (VirtualizedList)
  • FlatList: 添加 ListEmptyComponent 属性
  • FlatList: 修改 separators.updateProps 属性的前 / 后顺序
  • FindNodeHandle properly handles ReactCurrentOwner current Fiber type
  • 将 React 版本从 16-alpha6 同步为 16-alpha12
  • Open in editor fix, show tip instead of error
  • 解决 parseFloat 错误使用 "radix" 的问题
  • 在 processColor.js 添加 flow
  • YellowBox 中添加可以忽略警告的方法
  • 重构 MessageQueue
  • 将 bundle 中的 module 按照路径进行排序

Yoga

  • 给 Java 提供 setPointScaleFactor 方法
  • 给 Java 提供 print 方法
  • 将测量的 nodes 大小作为四舍五入时的最小约束
  • 在 RN 中禁止 yoga 进行四舍五入
  • 从实验性特征中移除四舍五入的特征
  • Move reset into yoga node and don’t set overflow as it has no effect
  • 通过简化调用来修复 useLegacyStretchBehaviour 标记
  • Fix flex-wrap with max constraint
  • Fix sizing of non stretch items
  • 使测量方式更像 web 中的测量方式
  • 将 YGLogger 移入 YGConfig 中并且把 YGNodeRef 与 log events 相关联
  • New round-to-pixel-grid algorithm that fixes possible subpixel gaps between sibling nodes
  • Assertion on attempt to get layout metrics from dirtied Yoga node
  • 添加 YGConfigCopy

Packager

  • 将 node-haste 下的 index 重命名为 DependencyGraph
  • Packager - 修复在 windows 中的 symbolicate
  • 不在启动时连接 websocket ,也不在停止时断开 websocket 连接
  • 当关闭 socket 时调用 onDisconnected() 而不是 onConnected()
  • 移除没有用到的 hash
  • 将 packager 的 inspector 超时时间从 5s 增加到 30s
  • ModuleGraph: 包括所有可能的 asset 类型
  • 优化 assets' JS
  • Worker-farm: 隔离 stdout / stderr
  • 正确处理 babel 忽略的文件,只返回内容
  • Force 'default' transform variant to be present
  • 使构建 bundle 的函数为异步执行
  • 从 Bundler 中抽取可复用的逻辑
  • Separate node polyfills from runtime transforms
  • 统一 source map 类型
  • 修改 postprocessing hook 使其能在 ModuleTransport 实例上运行
  • Inline plugin: type options
  • 使 test 从 side effects 独立出来
  • 从 cache key 中移除不相关的选项
  • Stronger typing for transform options / remove duplication
  • 修复 module system 和 polyfills 的路径
  • 修正对 haste packages 的支持
  • Fix release / minified bundle builds
  • 更快的 terminal 反应
  • Fork local version of worker-farm
  • ResolutionRequest: keep option object as it is
  • Buck worker: output assets
  • Buck worker:更好的类型
  • Worker:强化 TransformOptions
  • AssetPathUtils: @flow
  • GlobalTransformCache: throat() 文件读取方法
  • 移除最后使用的 declareOpts 的部分并用 Flow 类型代替
  • TransformCache: 保存最后一次进行缓存的时间
  • TransformCache: 包含 UID + 不再使用 base64
  • 更新 jest-runtime 到 19.0.3 版本
  • Buck library: expose asset content
  • Buck library: aggregate assets
  • AssetServer: @flow
  • getAssetDataFromName: @flow
  • GlobalTransformCache: 将 transform 配置摘要进行缓存
  • GlobalTransformCache: 修复无约束函数
  • Add support for relative files with custom extensions
  • 正确转换 assets 以避免字符串
  • worker-farm/lib/fork.js: cleanup
  • worker-farm: 传递明确的 execArgv 给 workers

三、修复 Bug


Android平台

  • 修复当点击设置中的“Comments”时导致的奔溃
  • 修复设置了 z-index 属性的组件触摸目标不准确的问题
  • 修复 Inspector 中 Page 构造函数提示 NoSuchMethodError 的问题
  • Fix Nodes not having correct view managers externally
  • 修复在使用 <Modal> 时造成状态栏颜色加深的问题

iOS平台

  • 修复当在 cli 参数中明确了 scheme 时执行 run-ios 命令出现的问题
  • 修复 RCTMultipartDataTask 中的内存泄露
  • 修复在 RCTTouchEvent 中由 NaN 值引发的奔溃
  • 修复 RCTAnimation 中头文件的问题
  • 在 npm package 配置中添加 third-party-podspecs
  • 修复在使用 react-native-tooltip 时出现的自动添加 “Cpoy” 选项的问题

iOS / Android 通用

  • 将 XMLHttpRequest 中的 withCredentials 默认值改为 true
  • 在公开的 API 中提供 findNodeHandle() 方法
  • 修复 TouchableHighlight 中的警告

本文为 Marno 翻译,个人公众号:aMarno,分享 RN 技术

[去论坛发表意见]