本文为 Marno 原创,转载必须保留出处!@H_301_5@
简书专题《 React-Native 开发阵营 》,欢迎关注和投稿@H_301_5@
React Native 优秀开源项目大全:http://www.marno.cn@H_301_5@
一、导读
本次更新亮点:@H_301_5@
在 IOS 上彻底移除了<MapViewIOS />
对 FlatList 进行优化:比如支持固定头部等
个人感觉这期更新基本可以忽略了!可以忽略了!可以忽略了!
二、重大变化
移除对 @provides 的支持
如果你使用了 @provides NameOfModule,那现在必须使 @providesModule 来代替了。
<MapView /> 组件被声明为过期已经有一段时间了,所以在这次 release 版本中直接移除了。
三、新特性
Android平台@H_301_5@
PickerAndroid: 在通过 positon 获取子组件前将子组件先转换成数组
允许实例化 DeviceInfoModule 时只传入一个 Context
Profiler: 移除旧的对分析器代码
Profiler: 通过 RN 包连接器下载文件
当使用 timer 计时超过 1 分钟时在警告中提示可以使用 AlarmManager 来设置更长时间的计时任务。
抽取 PackagerConnectionSettings 类确保可以更方便的重用 PackagerConnection 模块
保证 ResourceDrawableIdHelper 是线程安全的
根据文档将 PositionError 更新为对象
通过手动进行字符串和枚举之间的转换来优化 ReactShadowNode
Set hasNewLayout on children when changing their layout due to display none parent
将 ReactMarker 中的字符串对比换为使用枚举类型进行比较
让 SystraceRequestListener 继承 BaseRequestListener
iOS平台@H_301_5@
Better TextInput: 将 TextInput 和 RCTUITextView 解耦
Better TextInput: 改进 RCTUITextView 中 placeholder 的功能
Better TextInput: 从 RCTTextView 中移除冗余的 UIScrollView
当在 mainBundle 中找不到 assets 时,对 mainBundle 以外进行搜索
Native Animated: 添加单元测试
Native Animated: 在 iOS 上当移除属性后将值重设为默认值
将 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 通用@H_301_5@
添加了对 View.* static accessibility traits accessors 的弃用警告
移除了官网文档中对 Navigator 的使用推荐
新增一个类 DeviceInfo 专门提供屏幕尺寸,字体缩放等信息
当加载模块异常时在报错信息中显示模块全名,代替之前的模块 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 方法
使用 checkPropTypes 代替直接调用 PropTypes
将 View 中的 propTypes 移到 ViewPropTypes 中
从 react-native-implementation 中移除 React 插件
改进 debugger 的深色背景模式
修复 Fiber 中 findNodeHandle() 出现的 bug
彻底移除 NavigationExperimental
在 React Native 渲染器中提供 ViewPropTypes 对象
允许重写 NativeModules
将 takeSnapshot 方法从 UIManager 移动到 ReactNative
移除 CustomComponents 文件夹和证书
重构 Chrome 的调试器的 JS 代码
重新添加"空检查"来避免 EventPropagators 出现 bug
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平台@H_301_5@
修复类似华为P9上出现的
java.lang.RuntimeException: Tried to get non-existent cookie
异常Apply numeric text event bubbling fix
CLI: 更新 runAndroid.js 修复 startServerInNewWindow 的问题
在 StackTraceHelper.convertJsStackTrace 中不奔溃
修复在 Nodes 中 FrescoModule 没有初始化的问题
修复 ReactShadowNode.toString() 方法报 NullPointerException
修复 ClassCastException in ReactModuleSpecProcessor (379b60d)
修改 Fresco 中 width 和 height 的顺序
iOS平台@H_301_5@
修复当 RCTPicker 中 item 为 0 时滑动导致的奔溃问题
修复在 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 通用@H_301_5@
修复 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 清理未完成的事件
修复 ReactNativeEventEmitter 中当 org. 实例消失时不分发事件的问题