React Native 0.44 正式版发布
2017-05-07 by Marno

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

一、导读


本次更新亮点:

  1. 在 IOS 上彻底移除了<MapViewIOS />
  2. 对 FlatList 进行优化:比如支持固定头部等

个人感觉这期更新基本可以忽略了!可以忽略了!可以忽略了!

二、重大变化


  • 移除对 @provides 的支持

如果你使用了 @provides NameOfModule,那现在必须使 @providesModule 来代替了。

  • 当 native 代码确实调用了 dispatched 时才回调 batchDidComplete

  • 移除 MapViewIOS(iOS

<MapView /> 组件被声明为过期已经有一段时间了,所以在这次 release 版本中直接移除了。

三、新特性


Android平台

  • PickerAndroid: 在通过 positon 获取子组件前将子组件先转换成数组
  • 允许实例化 DeviceInfoModule 时只传入一个 Context
  • 在文档中添加关于如何将包含 RN 代码的安卓模块部署到 Nexus 或 Maven 仓库的说明
  • Profiler: 移除旧的对分析器代码
  • Profiler: 通过 RN 包连接器下载文件
  • 当使用 timer 计时超过 1 分钟时在警告中提示可以使用 AlarmManager 来设置更长时间的计时任务。
  • 抽取 PackagerConnectionSettings 类确保可以更方便的重用 PackagerConnection 模块
  • 保证 ResourceDrawableIdHelper 是线程安全的
  • 如果没有需要清理的 frame callback 则不调用 clearFrameCallback() 方法
  • 根据文档将 PositionError 更新为对象
  • 通过手动进行字符串和枚举之间的转换来优化 ReactShadowNode
  • Set hasNewLayout on children when changing their layout due to display none parent
  • 将 ReactMarker 中的字符串对比换为使用枚举类型进行比较
  • 让 SystraceRequestListener 继承 BaseRequestListener

iOS平台

  • Better TextInput: 将 TextInput 和 RCTUITextView 解耦
  • Better TextInput: 改进 RCTUITextView 中 placeholder 的功能
  • Better TextInput: 从 RCTTextView 中移除冗余的 UIScrollView
  • Better TextInput: 支持自动扩展高度
  • Better TextInput: 固定多行模式下的行间距,为自动扩展功能做准备
  • 当在 mainBundle 中找不到 assets 时,对 mainBundle 以外进行搜索
  • Native Animated: 添加单元测试
  • Native Animated: 在 iOS 上当移除属性后将值重设为默认值
  • 添加 iOS 使用 Linking 打开地理坐标的示例代码
  • 将 RCTLinkingManager 移动到主线程
  • Make Cxx modules lazy on iOS
  • 在 RCTUtils 提供 RCTImageLocalAssetURL 方法
  • RCTRootView is now has empty autoresizing mask by default
  • NavigatorIOS: 移除 NavigationContext
  • 提升 iOS 上滚动时的使用体验
  • 让 run-ios --device 示例更容易被复制
  • 将 RCTPlatform.isTesting 和 RCTRunningInTestEnvironment 进行合并
  • 将 xcode 依赖从 0.8.9 更新到 0.9.1,解决了 npm
    安装时出现 WARN deprecated node-uuid@1.4.7: Use uuid module instead
  • 按照 xcode 的默认格式对 plist 进行缩进
  • 将 bindKeys 移动到 RCTBridge setUp
  • Add missing toggleElementInspector event send when jsLoaded
  • 对 listeners 的数量进行迅速地调整
  • Make the choice of bridge based on an optional delegate method
  • 提供从通知中心移除通知的能力
  • 支持对 scale 设置负数 (transform style property)

iOS / Android 通用

  • Website: 清理代码, 添加单元测试, 移除对 sass 的依赖
  • 添加了对 View.* static accessibility traits accessors 的弃用警告
  • 移除了官网文档中对 Navigator 的使用推荐
  • 新增一个类 DeviceInfo 专门提供屏幕尺寸,字体缩放等信息
  • 添加对嵌套了样式的动画的支持
  • 添加 React Native 特征标记来进行 Stack 和 Fiber 之间的切换
  • 在 cli 设置中支持自定义 local server 的日志记录工具
  • 删除未使用的 onNativeException() 方法
  • 当加载模块异常时在报错信息中显示模块全名,代替之前的模块 ID
  • 更好的说明关于显示 systrace
  • 使用 Fiber 时支持字符串类型的返回值
  • 如果模块 require 失败,不吞咽错误
  • 不加载 native 模块作为 CS bundle 的一部分
  • 使用 fbjs/lib/invariant代替 invariant
  • Packager: GlobalTransformCache: 忽略与 fecthing 相关的错误
  • Packager: GlobalTransformCache: reduce asynchronicity for non-cached bundles
  • Packager: 清除缓存
  • Packager: GlobalTransformCache-test: 禁用非确定性测试
  • Packager: Package.js: 覆盖错误情况
  • Packager: Module.js: 覆盖错误情况
  • Packager: TerminalReporter: 停止报告全局缓存的错误
  • Packager: ResolutionRequest.js: 将 _resolveNodeDependency() 变为同步的方式
  • Packager: ResolutionRequest.js: 将 resolveDependency() 变为同步
  • Packager: TransformCache: 不要每一次都对 transformOptions 进行rehash
  • Packager: TransformCache: 使用 sha1 代替 murmurhash
  • Packager: GlobalTransformCache: 重试通过 keys 进行 fetches
  • Packager: 将 Module 中 read() 方法变为同步方式
  • 使用 Object.assign 代替 copyProperties
  • 在开发模式下只使用 EventValidator
  • FlatList: 不传入 getItemLayout 时 scrollToIndex 无效
  • FlatList: 支持固定头部
  • FlatList: 当数据发生变化时清除对 onEndReached 的回调

很多人也发现了,之前使用 FlatList 时,在滑到底部后会连续回掉 onEndReached,这次应该是修复好了。

  • FlatList: 移除 shouldItemUpdate 方法
  • FlatList: 快速滑动并切换 numColumns 时显示有用的错误信息
  • 使用 checkPropTypes 代替直接调用 PropTypes
  • 将 View 中的 propTypes 移到 ViewPropTypes 中
  • 从 react-native-implementation 中移除 React 插件
  • 改进 debugger 的深色背景模式
  • 修复 Fiber 中 findNodeHandle() 出现的 bug
  • 彻底移除 NavigationExperimental
  • 在 React Native 渲染器中提供 ViewPropTypes 对象
  • 允许重写 NativeModules
  • 将 takeSnapshot 方法从 UIManager 移动到 ReactNative
  • 移除 CustomComponents 文件夹和证书
  • 重构 Chrome 的调试器的 JS 代码
  • 在 Windows 用户使用 local-cli 时停止显示 yarn 的错误信息
  • 当栈结构中没有文件的时,避免出现致命的 YellowBox 错误
  • 重新添加"空检查"来避免 EventPropagators 出现 bug
  • 在 red box 中显示更多有意义的报错信息
  • Yoga:在 java 代码中暴露 UseWebDefaults
  • Yoga:在没有新的布局时不将布局输出传输到 java
  • Yoga:Don't transfer layout outputs to java for unset edges
  • Yoga:修复当子组件超出父组件时使用 align-content: center, flex-end 显示不正确的问题
  • Yoga:当节点被移除时使布局无效
  • Yoga:重置的时候将属性设为 Web 默认的方式

四、修复 Bug


Android平台

  • 修复类似华为P9上出现的 java.lang.RuntimeException: Tried to get non-existent cookie 异常
  • Apply numeric text event bubbling fix
  • CLI: 更新 runAndroid.js 修复 startServerInNewWindow 的问题
  • 在 StackTraceHelper.convertJsStackTrace 中不奔溃
  • 修复当 native 代码修改一个被 JS 移除的 modal 大小时导致的奔溃
  • 修复在 Nodes 中 FrescoModule 没有初始化的问题
  • 修复 ReactShadowNode.toString() 方法报 NullPointerException
  • 修复 ClassCastException in ReactModuleSpecProcessor (379b60d)
  • 修改 Fresco 中 width 和 height 的顺序

iOS平台

  • 修复当 RCTPicker 中 item 为 0 时滑动导致的奔溃问题
  • 修复在 RCTDevSettings 中获取属性权限时的警告
  • 修复在 RCTJSCExecutor 上重写 native 模块时的奔溃问题
  • 修复使用 native 的 timing 动画时在 iOS 上发生延时的问题
  • 修复 RCTJSStackFrame::stackFrameWithDictionary 中导致奔溃的问题
  • 修复在 RCTRedBox::formatFrameSource 中的奔溃问题
  • 修复 ReactCxx xcodeproj 工程
  • 修复官方 UIExplore xcodeproj 工程中的各种警告
  • NativeAnimated: Fix missing update at the end of the batch
  • 修复当归档时 bridge headers 出现的问题
  • 修复因为设置 scale 为 0 的 transfrom 动画时破坏 hitTest 机制的问题

iOS / Android 通用

  • 修改在 navigation 文档中的拼写错误
  • 将 TextInput 的 'defaultValue' 属性修改 'string' 类型
  • 修复 YellowBox 布局使得在其打开的时候不会影响 app 的布局
  • FlatList: 修复 ItemSeparators 重复的问题
  • FlatList: 修复 minimumViewTime
  • FlatList: 修复在组件重新绘制时触发 Animated.event 的 attach / detach
  • npm start -- --reset-cache 命令中添加 --
  • 修复在 Linking 中关于 getInitialURL 返回值的误导
  • FlatList: 修复因为 nodeHandle 引发的奔溃
  • 修复 ReactComponentWithPureRenderMixin 的使用(react-navigation 与0.43 不兼容的问题就在这里)
  • 修复 "Running on a device" 文档中的语法错误
  • Website: 修复官网中 Showcase 板块中在 Safari 中图标不能显示的问题
  • 修复 PerformanceLogger 清理未完成的事件
  • Animated: 添加缺失的 super 方法调用来修复原生动画奔溃的问题
  • 修复 ReactNativeEventEmitter 中当 org. 实例消失时不分发事件的问题

本文为 Marno 翻译,个人主页【点我关注】,个人公众号【aMarno】分享 RN 技术

[去论坛发表意见]