[0.56]React-Native 中文更新日志

[0.56]React-Native 中文更新日志

Photo by Lautaro Andreani / Unsplash

译者注:由于个人水平有限,另外翻译changelog需要阅读大量PR,翻译可能有不准确的地方,望谅解。如果发现有翻译不准确的地方,可以留言或是于Github上提交:react-native-docsZh

欢迎阅读React Native的2018年6月的更新日志!自3月份以来,有超过60位贡献者提交了总计 816份 commits - 在此,向你们致以诚挚的敬意!

正如您刚刚看到的,0.56新版本有一些重要的 突破性变化 需要大量的额外测试才能达到稳定版本。这也是时隔数月(4月和5月)才发布的主要原因,但每月发布一个新版本的计划并不会因此改变。

要点

React Native 现在使用 Babel 7

升级到0.56时,请确保将您的 babel-preset-react-native package.json 依赖项提升至 ^5.0.1 或更高的版本。

React Native 组件作者需要更新其依赖库以使用最新的Babel预设,因为Babel 7 并不向下兼容。

如果您在升级到Babel 7时遇到问题,请仔细检查相关文档,特别是与 Package RenamesScoped Packages 相关的部分。

如果您需要使用尚未升级到Babel 7 的库,babel-bridge 组件可以助您实现暂时的兼容。当然您还可以通过 yarn resolutions 等工具强制执行Babel 7 依赖。

Node 8 是此版本RN所需的最低版本。

现在已允许使用尾部逗号。

iOS 9 是此版本RN所需的最低版本

(译者注:截止至2018.05,在所有类型的ios设备上,国内使用低于ios9系统的设备占有率应当在2%左右)

对于用户来说,任何可以运行iOS 8的设备都可以升级到iOS 9。而开发人员也仅仅只需修改一个Xcode级别的设置项(IPHONEOS_DEPLOYMENT_TARGET)。

Xcode 9 是此版本RN所需的最低版本

我们建议使用 Xcode 9.4,因为这是Facebook官方开发测试过RN时使用的版本。

Android 项目现在使用 Android 26 SDK 进行编译。

在当前版本中的 target API level 保持不变。

自2018年8月开始起,提交给 Google Play Store 的新应用程序至少需要以API 26为目标。您现在就可将项目的 target API level 设置为API​​ 26(或更新版本)。如有任何问题,请告知官方。因为我们希望在发布 RN-0.57.0 时得以确定对 Android API 26 的完全支持。

WebView 在默认情况下只会加载http(s)URL

默认情况下将禁用 地理位置获取

Flow 改进, PropTypes 将被抛弃使用.

为几个组件添加了相应的Flow类型。

我们正在抛弃 PropTypes 和 runtime checks(运行检查),而是依赖于 Flow。您将注意到此版本中有众多的与Flow相关的改进。

  • 在较新的Xcode版本上修复项目设置警告,删除不必要的控制台日志记录。
  • 更先进的 YellowBox.
    按新旧程度排序警告,按格式字符串分组警告,显示堆栈跟踪,显示加载源映射的状态,支持检查每次出现的警告以及错误修复。
  • Prettier 文件管理!
  • 众多的错误修复.

React Native 迭代进度

提要: Facebook内部团队目前正在努力重构一些核心架构这是一项 正在进行的工作,距离投入开源世界使用还需要一段时间,但我们觉得有必要让您知道前文中提到的重构大体内容是什么。

修正: 功能变化

  • 升级 React Native 依赖至 Babel 7 - f8d6b97
  • 使用 react-native init 创建新项目将使用 Babel 7 - e315ec9
  • 限制 WebView 的支持范围,现仅支持http及https (译者注:禁止用户使用其他的URL,比如 file:// ): 634e7e1, 23f8f7a
  • Node 版本的最低要求升高到 node 8 - c1e6f27
  • 升级 React 版本依赖至 v16.4.1, 并同步 React Renderer 版本至 ae14317 - 72d22e8
  • 更新新项目模板的Flow配置以修复由于 @providesModule 模块被移除导致的报错:Cannot resolve module X - 843a433
  • 升级 Flow 版本至 v0.75 - 3bed272, 8aaf73b, 6264b69
  • 升级 Flow definitions (译者注:Upgrade Flow Definition in RN + Metro) - f8b4850
  • 升级 Prettier 版本至 v1.13.6 - 29fb2a8, 8aaf73b
  • 升级 Jest 版本至 v23.2.0 - 536c937#DIFF-b9cfc7f2cdf78a7f4b91a753d10865a2, 8aaf73b
  • 升级 Metro 版本至 v0.38 - d081f83
  • 现代化的 YellowBox(译者注:使用所谓 modern YellowBox 替换现有的 YellowBox,新特性包含:1.按时间倒序排序警告、2.按格式字符串分组警告[若存在]等等 )- d0219a0
  • 禁止 invariant/warning - 521fb6d
  • 移除 原生 prop 类型检查(译者注:官方消息已确认propTypes将被完整的移除,类型检查将被Flow接管) - 8dc3ba0
  • Add $FlowFixMe to invalid prop accesses where Flow wasn't complaining before - f19ee28
  • Image 创建 Flow props - 8bac869
  • SegmentedControlIOS 添加 Flow type - 113f009
  • ProgressViewIOS 添加 Flow type - c87701b
  • PickerIOS 添加 Flow type - 1c66cdc
  • Switch 添加 Flow type - 06052a2
  • Slider 添加 Flow type - cbe045a
  • RefreshControl 添加 Flow type - 891dfc3
  • ListView 添加 Flow type for - 4b1ecb6
  • TextInput 添加 Flow type for - c8bcda8
  • TouchableBounce 添加 Flow type for - 8454a36
  • TouchableOpacity 添加 Flow type - 44743c0
  • TouchableHighlight 添加 Flow type - f0c18dc
  • TouchableWithoutFeedback 添加 Flow type - 0b79d1f
  • ScrollView 添加 Flow type - b127662
  • DatePickerIOS 添加 Flow type - 97e572e
  • KeyboardAvoidingView 添加 Flow type - 188b118
  • ActivityIndicator 添加 Flow type - 0b71d1d
  • TouchableBounce 之中移除 $FlowFixMe - ffda017
  • ScrollView 之中移除 $FlowFixMe - af6e2eb
  • ListView 之中移除 $FlowFixMe - af6e2eb
  • Text 之中移除 $FlowFixMe - 6042592
  • RTLExample 之中移除 $FlowFixMe - 206ef54
  • AppContainer 之中移除 $FlowFixMe - a956551
  • Slider 之中移除 $FlowFixMe - 1615f9d
  • StyleSheet: 新增支持边框尺寸变化的动画 - 3e3b10f
  • 更新 react-devtools-coreplist 版本以修复由 npm audit 所报告的安全问题 - 3a1d949
  • 更新 Switch 至 ES6 Class - 970caa4
  • 更新 Slider 至 ES6 Class - 5259450
  • 更新 ActivityIndicator 至 ES6 Class - edd7acb
  • 更新 RefreshControl 至 ES6 Class - a35a238
  • 更新 KeyboardAvoidingView 至 ES6 Class - c017dcb
  • 更新 DatePickerIOS 至 ES6 Class - f8c8231
  • 更新 Text 至 ES6 Class - ab92c00
  • context.isInAParentText 替换为 React.createContext - e1339bc
  • 整理(清理) Text 的实现代码 - 06c05e7
  • 更新 Text (内部实现方法)至 React.forwardRef - e708010
  • 更新 View (内部实现方法)至 React.forwardRef - 06c05e7
  • 在测试中移除 genMockFunctiongenMockFn 并用 fn 代替 (390ded8)
  • 修正更新 ViewProps 代码 (65c336f)
  • Spread TVViewProps into ViewProps instead of intersection (bc658d3)
  • 允许在函数参数上使用尾随逗号 (1e2de71)
  • 使用 let/const 替代 react-native-github/Libraries (8f5ebe5)
  • 重构 jest 中的 MockNativeMethods (5d4c542)
  • 使用 app.json 中的 app name 来注册应用程序 (57774a4)
  • 建议使用 git apply --reject 以避免更新失败 (4fbd244)
  • TouchHistoryMath 从 React Repo 移动到 React Native (06085d3)
  • 重构 RCTInputAccessoryView (c136c54)
  • 不要将 ListEmptyComponent 放入额外的 View 之中 (db061ea)
  • Text PropTypes 实现独立到其专有文件中(TextPropTypes.js) (cd8128b)
  • 在 jest 之中模拟 ReactNative.NativeComponent 原生方法 (3e9a371)
  • ViewVirtualizedList 设置更为严格的类型限制 (5035af8)
  • ViewPropTypes 添加可选值 (f1316ca)
  • 对于原生组件而言 propTypes 是可选的 (dbdf43b)
  • Style 重命名为 DangerouslyImpreciseStyle (4895c64)
  • [BREAKING] requireNativeComponent 的签名已简化为一个额外的可选项 (820673e, b549e36, 28d3778, 1c90a2b, and 1ab7d49 by @yungsters)

iOS 更改

  • [BREAKING] WebViews 现在有且只能使用 https ; 请勿使用 file:// (634e7e1 by @mmmulani)
  • iOS 9 是此版本RN所需的最低版本 (f50df4f)
  • 更新 podspecs 以适应 iOS 9 (092103e)
  • Xcode 9.4 现在用于运行测试 (c55bcd6)
  • 去除 iOS 11.3+ 上的控制台日志记录止 WebSocket 信息 (8125be9)
  • 暴露 RCTFont 的大小覆盖(以便于测试) (6611fef)

Android 更改

  • 现在使用 Android SDK 26 编译项目 (065c5b6)
  • 在新的 Android 项目中使用 Google Maven repo (6d56a23)
  • 将 Buck 升级为 v2018.03.26.01 (1324e7b)
  • 升级 gradle-plugin 至 2.3.3, 升级 gradle 至 3.5.1, 升级 gradle-download-task 至 3.4.3 (699e5ee)
  • Bump NDK APP_PLATFORM to android-16 (5ae9799)
  • Bump glog to 0.3.5 (added libc++ support) (8bd4344)
  • ReactFragmentActivity 已被弃用,因为在 API-14 或更新级别时不需要 (8ea8dd6)
  • 将 Android 点击声添加至 Touchables (722f88c)
  • 默认 underlineColorAndroid 为透明 (a3a98eb)
  • WebView 在默认情况下禁用获取地理位置 (23d61b3)
  • 确保带有非法字符的 cookie 不会发送到 okhttp (04028bf)
  • 更新应用图标以以适应新的Android版本 (94393f8)
  • ReadableNativeMap 提供更好的错误提示 (30d06b4)
  • 将 Fresco 更新为 v1.9.0, 将 okhttp3 更新为 v3.10.0 (6b07602)
  • 为内联图标(inline icons)添加色调颜色 (e8e2a6e)
  • 修复抗锯齿圆形背景 (7500b3e)
  • react-native link 现在使用用 '/' 代替 '_' 在 link 依赖包时. 如果您以前链接过依赖包,它们将再次 link。 (dbd4759)
  • 新项目模板将使用现有项目范围(译者注:gradle文件中设置的属性)中的属性 (5ae80f9)

移除:已移除的功能

  • 弃用 focusTextInputblurTextInput (ce3b7b8)
  • [BREAKING] ImageResizeMode on Image is no longer exposed; check your usage of resizeMode; the same resize modes exist, but pass them as strings instead (870775e by @TheSavior)

Android 功能移除

  • 移除原生扩展 (7c5845a)
  • 移除 Fresco ProGuard 规则 (07df365)

iOS 功能移除

  • 移除已弃用的 UIActionSheetDelegate 方法 (5863b56)

已知的问题

在此版本的 RC 测试期间,部分问题还没有最终解决方案( 19827, 19763, 19859, 19955 )。 我们知道这些问题的存在,希望通过发布0.56.0版本,能促进开发人员找到最终的解决方案,从而实现更快的解决方案和更好的0.56.1版本。 因此,请在提交新问题之前检查已经提交的问题。

如果您使用Windows开发React Native应用程序,我们建议您特别关注这些问题(issue),因为有很多关于 Win 10 和 RN 0.56 相关问题的报告。

汪淼

汪淼

china