- 本文为 Marno 原创,转载必须保留出处!
- 公众号【 aMarno 】,关注后回复 RN 加入交流群
- React Native 优秀开源项目大全:http://www.marno.cn
一、前言
想必也没什么人爱看更新日志这种东西,所以我直接总结一下好了。整体而言修复了一些以往版本的bug,在Android和iOS平台上各增加了一些无关痛痒小功能。还宣称提高了检测属性变化的效率,因为属性变化就意味着重新render,所以按官方的说法这次更新是对属性变化的检测也更为严格了。但到什么程度,还未知。
至于很多人关心的效率方面,似乎这个版本并没有太大的提升。毕竟属于日常升级,所以也是情理之中。
但是亮点还是有:
1.属性支持百分比参数了,目前仅支持(padding,margin,width,height,minWidth,minHeight,maxWidth,maxHeight,flexBasis)。使用方法:padding:’30%’
2.init project 的时候,可以选择创建带有一些常用页面的模板工程了。但是目前好像模板还比较少,具体可以看这里【戳我没错】。比较期待这个功能,要是可以支持自定义模板就好了。
差不多就这些,想看详细内容的可以继续往下看。想看英文原文的请戳本文最顶部的链接。翻译的比较水,没人给校正,各位随意看看就好了!
二、重大变化
iOS/Android双平台:
- 优化属性发生变化时的验证方式和效率
Android平台:
新创建的应用 windowSoftInputMode 默认的模式发生改变。
现在所有通过react-native init所创建新项目,在 Android 平台上将 Activity 的 windowSoftInputMode 属性由之前默认的 adjustUnspecified,改为 adjustResize。通过这种 Native 方式解决 Android 上键盘遮挡输入框的问题,而不再使用JS的解决方式,比如之前用到的 KeyboardAvoidingView组件。
移除 JSBundleLoader.getSourceUrl() 方法。
如果你使用到了以下API:
1.JSBundleLoader.getSourceUrl()
2.ReactInstanceManager.getSourceUrl()
3.ReactInstanceManager.getJSBundleFile()
现在必须改为调用:
1.CatalystInstance.getSourceURL()
2.JSBundleLoader.loadScript()移除 RecyclerViewBackedScrollView 组件
这个组件是很久之前为了解决 scroll-back-when-data-is-added 这个bug而添加的,但是现在已经直接通过ScrollView内部代码解决了这个问题。
三、新特性
1.iOS/Android双平台:
- WebView 组件新增 injectJavaScript 方法
该方法支持直接向 WebView 组件注入 JS 代码,但是并不可以用于在页面加载完后执行 JS 代码。
2.Android平台:
- 让布局动画遵守样式中设置的不透明度
- Text 组件新增 selectionColor 属性
- ScrollView组件新增 overScrollMode 属性
- 实现自定义基线函数的Java绑定
- TextInput:避免二次触发 onSubmitEditing
- 通过 Native 代码实现 ScrollView.scrollToEnd
- 支持从Java同步钩子调用和返回任意类型
- Switch 组件支持 tintColor 和 thumbTintColor 属性
- Slider组件支持自定义 thumb,track,progress 属性
- 为 dynamics 添加 null 检查
- 在BUCK文件中添加缺少的导入
- 引入 FallbackJSBundleLoader
- 改进在 Text 组件中嵌套组件时的报错机制
- 在 pointerEvents 设置后仍允许组件折叠起来
- 修改 WebView 的 DomStorageEnabled 属性默认值为true
- 允许将 view manager 当做 Native模块访问
- 不需要 DevSupportManager 去创建一个 DevInternalSettings
- 删除 ModuleRegistryHolder
- 使 NativeArray 的消费变为显式
3.iOS平台
- 给 AlertIOS.prompt() 方法添加一个 keyboardType 参数
- 为 RCTEventEmitter 添加使用说明文档
- 删除 RCTExecuteOnMainThread 的弃用警告
- 在 RCTTouchHandler 中添加新的方式处理并发手势识别
- RCTTouchHandler 不再延迟任何触摸
- 删除过期方法 ‘RCTExecuteOnMainThread’
- 在新 bridge 上禁用RCTPerfMonitor
- 更新 NativeComponentsIOS.md 文档
- RCTConvert:不推荐使用NSStringArray typedof
- 去除 NativeModules 中的 RK/RCT 前缀
- 添加在app 启动时开启 sampling profiler 的选项
- 为考虑 ABI 兼容性使用 int 代替 NSInterger
- 停止将未使用的 JS 文件复制到 Pods 文件夹中
- 在没有 bundle 时候显示 redbox
- 按下重新加载时自动关闭 redbox
- ‘cannot calculate shadow efficiently’ 不再会报警告
- 更好的执行 intrinsicContentSize
- 将 setFrame, setLeftTop 等方法弃用或者删除
- UIManager.measure() 支持任意 zoom 效果下的 view hierarchy
- 向 JS 提供 Native 运行的环境和参数是测试、开发还是生产环境模式
- 可以通过配置环境变量禁用 yellow box 警告
4.其他
- 更新 React 版本到 15.4.1。
- 为组件的部分属性添加百分比支持,目前支持(padding,margin,width,height,minWidth,minHeight,maxWidth,maxHeight,flexBasis)。
- JSC堆捕获将其他 roots 添加到可视化。
- 为 ScrollView 和 ListView 添加 scrollToEnd 方法。
- Packager: 内部增加记录错误的程序。
- 在 node_modules 下添加 symlinks 作为projectRoots 的一部分。
- 添加 cell size 到 JSC heap capture visualization。
- 为 Navigation.Header.BackButton 添加 style 和 imageStyle 的属性。
- 可以通过 ‘react-native’ 命令创建制定类型模板的项目
- 通过 ‘react-native init’ 初始化项目时创建README
- 可以通过 ‘react-navigation’ 直接创建带有导航器的项目
- 通过 Yarn 安装或卸载包
- 通过 package.json 脚本运行程序
- 更快的生成 source map
- High-perf source map builder
- 在 AnimatedValueXY 中添加 removeAllListeners 方法
- 可以控制 image 的缓存策略
- 支持在Windows上复制到剪贴板
- 使用 fbjs/lib/invariant 替代 invariant
- 允许在场景堆栈上设置自定义样式
- 将C ++ bridge 移到oss目录中
- XHR: support typed arrays for request payloads
- 通过 NativeAnimated 可以驱动任何数字的属性
- 确保文档的链接地址正确
- 避免在 TextInput 中出现空的 _inputRef
- 允许在调试器视图中使用深色背景
- 当 row 被滑动到关闭的位置时,适当的清除 openRowID
- 取消 SwipeableQuickActions 中对 action 的最大限制(之前限制为2)
- 允许长宽比超出父组件的边界
- 将 TextUpdate 的padding 信息转移到 text input 组件上
- 不限制在大小为0的父组件中使用 absolute 定位子组件
四、修复Bug
1.iOS/Android双平台:
- 修复子组件尺寸溢出父组件时该父组件的大小
- 在 Native 的代码中修复了 skew transform
2.Android平台:
- 修复在 dev 模式下 JSC 崩溃问题
- 修复在 startup 时候抛异常的问题
- 修复 ListView 滑动阻塞问题
- 修正在 NativeModulesAndroid.md 文件中的错别字
- 修复 UIExplorer 进入破碎状态
- 修复调用 webview.postMessage 时抛出 not a constructor in WebView 的问题
- 修复 TextInput 的占位字符自定义字体无效的问题
- 修复 UIViewOperationQueue 中的潜在 NPE
- 修复在动画状态时的组件使用 LayoutAnimation 动画开始位置错位
- 重置 pointerEvents 为空值
3.iOS平台
- 修复 TextInput 在开启校正功能后自动回调 onChange() 方法的问题
- 修复正式版测试用例:添加 -ObjC and -lc++ 测试目标
- 修复 passThroughTouches
- 修复 nil TVView on pop
- 修复在编译时关于索引类型不正确的警告
- 通过添加 __unused args 标记来修复其他编译警告
- 使 CocoaPods 可用
4.其他
- 纠正 PixelRatio.md 中的拼写错误
- 修复在 VerticalSwipeJump 模式下手势返回方向错误的问题
- 修复 node4 上的打包程序崩溃的问题
- 修复通过 HTTP 加载 minified bundle 的问题
- 修复在使用 min-size 约束时换行的计算方式
- 修复 skew transformation
- 纠正在 Yoga classes 中的拼写错误
- 纠正 webview 示例中字符串信息的拼写错误
- 纠正 ResolutionRequest.js 中的拼写错误
- 修复在 align-item 或 justify-content 使用center或flex-end时 absolute position 出现的问题
- 修复导航器场景被错误地折叠
- 修复使用 margin 时的长宽比不准确的问题
- 修复 app 无故崩溃的问题(终于修复了!!!)
- 打破仅在调试环境中发生的无限循环