- 本文为 Marno 原创,转载必须保留出处!
- 公众号 aMarno,关注后回复 RN 加入交流群
- React Native 优秀开源项目大全:http://www.marno.cn
一、导读
本次更新亮点:
- 在 IOS 上彻底移除了
- 对 FlatList 进行优化:比如支持固定头部等
个人感觉这期更新基本可以忽略了!可以忽略了!可以忽略了!
二、重大变化
移除对 @provides 的支持
如果你使用了 @provides NameOfModule,那现在必须使 @providesModule 来代替了。
当 native 代码确实调用了 dispatched 时才回调 batchDidComplete
移除 MapViewIOS(iOS)
组件被声明为过期已经有一段时间了,所以在这次 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. 实例消失时不分发事件的问题