[0.56] React Native 中文更新日志
译者注:由于个人水平有限,另外翻译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 Renames 和 Scoped 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内部团队目前正在努力重构一些核心架构这是一项 正在进行的工作,距离投入开源世界使用还需要一段时间,但我们觉得有必要让您知道前文中提到的重构大体内容是什么。
增加的新特性
- 更新(译者注:更新内容为于babelHelpers.js文件中添加自动脚本代码)
babelHelpers
以支持 Babel 7 - fbd1bea FlatList
已兼容严格模式 - a90d0e3- 启用
?.
可选的链接操作符插件 - aa6f394 - 支持
flexWrap: 'wrap-reverse'
- d69e550 - 增加属性类型
accessibilityTraits
至Text
(译者注:为了修复VoiceOver
无法正确识别标题的bug)- 654435d - 为 templates 添加devDependencies支持(译者注:templates 可以有一个devDependencies.json文件,在里面申明依赖项和devDependencies,亦可保持与当前版本的兼容性。) - c4ab03a
- 在
SpringInterpolator
中添加对springDamping的支持 - 1dde989
Android 新增功能
- 为 build.gradle 添加 CRLF(回车符) 结尾的支持,以修正命令
react-native link
出错的问题 - 843cfc3 - 添加一个包含数字0-9与小数点的输入键盘支持(译者注:对原生 inputType“numberDecimal” 支持) - 5b7a817
- 增加了一种关闭 PopupMenu 元素的方式(译者注:当 Popupmenu 出现时触发屏幕方向改变[横屏/竖屏],将自动关闭Popupmenu) - 353c070
- 添加
Image.defaultSource
属性 (译者注:此属性为设置加载远程图像时显示的占位符图像[本地资源])- https://github.com/facebook/react-native/commit/b0fa3228a77d89d6736da6fcae5dd32f74f3052c - 添加支持 Image 对象新属性 resizeMode=repeat (译者注:[resizeMode]当组件尺寸和图片尺寸不成比例的时候如何调整图片的大小 [repeat]重复平铺图片直到填满容器。图片会维持原始尺寸)- 0459e4f
- Yoga: 新增了一个不推荐使用的
getParent
API 变更方法 - c3c5c3c
iOS 新增功能
- 新增对 Xcode 9.4 和 iOS 11.4 的支持(通过版本测试) - c55bcd6
- 添加对 Homebrew 安装的 Node 环境的支持 - 0964135
- 添加对 textTransform 样式支持 - https://github.com/facebook/react-native/commit/8621d4b79731e13a0c6e397abd93c193c6219000
- 添加关于 Swift 使用方法的文档到
RCTBridgeModule.h
之中 - https://github.com/facebook/react-native/commit/ca898f4367083e0943603521a41c48dec403e6c9
修正: 功能变化
- 升级 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-core
与plist
版本以修复由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 - 在测试中移除
genMockFunction
与genMockFn
并用fn
代替 (390ded8) - 修正更新
ViewProps
代码 (65c336f) - Spread
TVViewProps
intoViewProps
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) - 为
View
和VirtualizedList
设置更为严格的类型限制 (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)
修正: 已修复的错误
VirtualizedList
now accounts forListHeaderComponent
length when calculating offset (537731f)- 在打开模态窗(modals)时将阻止显示隐藏状态栏 (076b1ce)
- 修复启用 Perf Monitor 重加载出现的崩溃问题 (4fcd997)
- 修复了远程调试器中的并发问题 (e5aa5b7)
- 修复
Modal
+FlatList
的滚动问题 (8799047) - 修复
RCTNetworking
在失效期间未清除所有 tasks/handlers 的错误 (b805172) - 使用
keyboardShouldPersistTaps: never
修复键盘错误 (ffe6c11) - 修复
Text
的响应逻辑 (e2ce22b) - 修复
VirtualizedSectionList
lint 警告 (26a1eba) - 修复
VirtualizedSectionList:ItemWithSeparators
(488a4c7) - 修复
TextInput
的初始布局大小 (c6b4f9f) - 修复
requireNativeComponent
检查 (1c90a2b) - 修复
TextInput
自动大写功能的BUG (ff70ecf) - 为
ViewPropTypes
添加缺失的事件 (41a9403) - 在
StatusBarManager
中添加缺少的 jest 模拟 (4a2c560) - 为 Metro module 添加 Flow 声明 (1853e15)
- 修复
ReactNative.NativeComponent
类型错误 (1/2) (de11ba2) - 修复
ReactNative.NativeComponent
类型错误 (2/2) (7528636) - 将 Image PropTypes 相关代码独立到新文件(ImageProps.js) (6765699)
- 测试: Fix JUnit report location when running Jest (85fc98d)
- 测试: Fix ReactImagePropertyTest SoLoader failures (#19607) (a52d84d)
- 测试: Fix jest snapshot testing on Windows (216bce3)
- 修复 使用
react-native init
新建项目时出现的 "Cannot resolve module" 错误 (27a497d) - 紧急修复关于
react-native-windows
的错误 (600747f)
iOS 更改
- 修复在 Xcode 10 beta 版本中出现的 undefined_arch 错误 - 3861dbef5b34734283563e28b454b68d3265d21a
- 使
react-native run-ios
命令与多个 Xcode 版本可以更好的配合使用 (302699a) - 修正 fishhook 依赖引入 (ca515e9)
- 修复
TextInput
组件在用空字符串清除文本后输入字符时发生的 Backspace 事件错误 (1ffb2b6) - 公开
InputAccessoryView
组件,修复其无法被 import 的错误 (80fc415) - 修复
InputAccessoryView
安全区域的一致性错误 (490f22a) - 修复头文件中使用C ++语法的问题 (bfcfe79)
- 修复
run-ios
命令中安装步骤的bug (0934c17) - 修复
run-ios
无法打开ios模拟器的bug (9736ddc) - 为 Fishhook 使用正确的依赖库。 这将修复 Xcode 9 和 Xcode 10 上的编译错误。 (a8b7457)
- 将缺少的
onChange
事件定义添加至DatePickerIOS
(3b53091) - 修复调用 Xcode 9.3 编译打包阶段引起的崩溃 (344c205)
RNTesterPods
: 添加缺少的依赖 (128c934)RNTesterPods
: 将参数has_value()
修正至hasValue()
(128c934)RNTesterPods
: 修正引入的依赖RCTTestAttributes.h
(128c934)RNTesterPods
: 修正conversions.h
以使用正确的命名空间 (128c934)- Fix or mark enum conversions surfaced by
-Wenum-conversion
(b8f30db) - 在缺少 DevSupport subspec 的情况下修正 CocoaPods 集成 (c09d509)
- 更新 Yoga 以处理 Xcode 框架项目中的内容 (cf036db)
- 修正 Blob 内存泄露 (122b379)
- 重加载 JS 时避免出现双重加载错误 (b348aa1)
- 取消关于 RCTCxxModule 的错误警告 (af76473)
Android 修正
- 修正
TextInput
在 Android 上的异常缓慢bug (1b4187f) - 修正绘制边框的路径尺寸,避免出现边框模糊的情况 (c5ca26a)
- 不要在
.android.js
文件中向requireNativeComponent
传递参数 (a51e8b1) - 当父级组件滚动时,避免
RefreshControl
被卡住 (33ffa79) - 防止不被支持的 ellipsize 模式导致应用崩溃 (85e33aa)
- 修复
DevServerHelper
中的 okhttp3 响应处理bug (56d48bd) - 修复
ReactInstanceManager
unmountApplication 以支持ReactRootView
回收 (4a9b2a7) - Fix
NullPointerException
when emiting event usingUIManagerModule
(291c01f) - 修复 Android 构建向导的 link (57e7556)
- Fix Android open source test failures (3e0ebc7)
- 修复视图索引 LayoutAnimation (d8fcdb9)
- 修复 originalNode 内存泄露 (8102e35)
- 修复
ScrollView
中的TextInput
BUG (2f1421d) - Disable onKeyPRess logic when handler not defined (41975f7)
- 在 pre-M android上修复权限请求 (6d27bd1)
移除:已移除的功能
- 弃用
focusTextInput
和blurTextInput
(ce3b7b8) - [BREAKING]
ImageResizeMode
onImage
is no longer exposed; check your usage ofresizeMode
; the same resize modes exist, but pass them as strings instead (870775e by @TheSavior)
Android 功能移除
iOS 功能移除
- 移除已弃用的
UIActionSheetDelegate
方法 (5863b56)
已知的问题
在此版本的 RC 测试期间,部分问题还没有最终解决方案( 19827, 19763, 19859, 19955 )。 我们知道这些问题的存在,希望通过发布0.56.0版本,能促进开发人员找到最终的解决方案,从而实现更快的解决方案和更好的0.56.1版本。 因此,请在提交新问题之前检查已经提交的问题。
如果您使用Windows开发React Native应用程序,我们建议您特别关注这些问题(issue),因为有很多关于 Win 10 和 RN 0.56 相关问题的报告。
VPS 推荐