React Native 0.42 正式版发布



  • 本文为【Marno】翻译,原文地址

    从0.18开始,RN默认项目全面转向ES6,语法大变化,请参考此贴学习 http://bbs.reactnative.cn/topic/15/

    如何升级现有项目的RN版本?

    一、前言

    想必也没什么人爱看更新日志这种东西,所以我直接总结一下好了。整体而言修复了一些以往版本的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 代码,而且可以在组件加载完成后继续注入。

    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 无故崩溃的问题(终于修复了!!!)
    • 打破仅在调试环境中发生的无限循环

    本文为 Marno 翻译,个人主页:【点我关注】,个人公众号【aMarno】

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

    0


  • 你好,创建带有导航器的项目命令是什么?



  • 你可以跳转到官方文档点击进去看下对应的commit里面有提到。

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

    0


  • 从0.35升级到0.42,页面全乱了。。。。。改动好大啊。。。哪里有升级细节说明。就好了。



  • @kingctan 你指的什么细节?

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

    0


  • 此回复已被删除!


  • ios没问题android 报错了
    求解
    0_1488948173238_F1E1C2CA-485E-49F3-9393-3B0918377F5B.png



  • @whk1459086640
    RN从0.40版本开始,包引入方式变了,故你的RN版本是0.40以下的最好升级至0.39



  • 这个问题解决了吗?


  • administrators

    这个错误是因为第三方库(比如react-native-wechat、react-native-zip-archive等)使用了"es6-promisify"这个库,这个库和新版RN不兼容。
    可以看下第三方库是否升级解决了这个问题,如果没有的话,就需要暂时移除。



  • 我就特别爱看更新log啊,所以楼主还是要记录详细哈。



  • @coyer 更新了 0.43 rc 版本可以在公告里查看。这次正式发布了 FlatList

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

    1

登录后回复