React Native 0.44 正式版发布



  • 本文为【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 技术

    个人公众号【aMarno】分享RN技术和生活见闻。欢迎交流。

    0


  • copy that



  • 此回复已被删除!


  • @Marno
    我想问一下,更新log中提到彻底移除NavigationExperimental,但是我在更新到0.44.0之后,是移除了Navigator,而把NavigationExperimental放到了另外一个临时的地方,因为已经被废弃了,以后应该会用哪一个关键字来替换呢?


登录后回复