React Native 0.71 版本正式发布,这是一个功能丰富的版本,包括:默认的 TypeScript、Flexbox Gap、恢复 PropTypes 和新架构更新等。
默认 TypeScript
从 0.71 版本开始,当你通过 React Native CLI 创建一个新的 React Native 应用时,你将默认得到一个 TypeScript 应用。
我们还直接从 react-native
包中提供内置的、更准确的 TypeScript 声明。这意味着你将不再需要 @types/react-native
,并且类型将与 React Native 版本同步更新。
用 Flexbox gap 简化布局
通过 React Native,你可以使用 Flexbox 在不同的屏幕尺寸上灵活地布局组件。浏览器已经支持 Flexbox gap、rowGap 和 columnGap 属性,它们允许你指定 Flexbox 中所有项目之间的空间大小。
这些属性在 React Native 中已经被要求了很久,0.71 版本增加了对使用像素值定义的 gap 的初始支持。在未来的版本中,我们将增加对更多数值的支持,比如百分比。
受 Web 启发的可访问性、样式和事件属性
这个版本包括了一些受 Web 标准启发的新属性,以使 React Native 的 API 在许多平台上保持一致。这些新的属性是纯增量的,所以对于同等的可访问性、行为或样式属性,没有预期的迁移或行为改变。
对于引入的任何新的属性别名,如果现有的属性有不同的名称,并且两者都被指定,那么新的别名属性值将被优先考虑。例如,这个版本为图像组件的 source
增加了一个 src
属性别名,以便与 Web 上的 src
属性保持一致。如果同时提供 src
和 source
,将使用新的 src
属性。
恢复 PropTypes
React Native 的属性类型,如 ViewPropTypes
和 Text.propTypes
,在 0.66 版本中已经被废弃,访问它们会输出废弃警告。当它们在 0.68 版本中被删除时,许多开发者在升级到最新版本的 React Native 时开始遇到错误。
所以在这个版本中,我们重新添加了 React Native 的 PropTypes,以便人们更容易升级和迁移他们的代码,避免使用它们。在 0.71 版本中,deprecated-react-native-prop-types
包也已经更新了所有的属性。在未来,我们计划继续进行废弃,并再次删除属性类型。
开发者体验的改进
React DevTools
这个版本将网络上两个流行的 React DevTools 功能带到了 React Native。
“Click to inspect” 是 React Dev Tools 左上角的选项,允许你在应用中点击一个项目,以在 Dev Tools 中检查它,类似于 Chrome 的元素检查器。
组件高亮将高亮你在应用中的 DevTools 中选择的元素,这样你就可以看到哪些 React 组件与屏幕上的哪些元素相一致。
新架构
这个版本根据目前收集到的用户反馈和报告,为实验性的新架构体验带来了许多改进。
- 缩短了构建时间:新的发布模式使用 Maven Central,这使我们能够大大减少 Android 上的构建时间,解决了 Windows 上的许多构建问题,并为新架构提供了更多的无缝体验。
- 少写 C++ 代码:你现在可以启用新架构,而不必在你的应用中添加任何 C++ 代码,CLI 应用模板中的所有 C++ 代码和 CMake 文件都已被清理
- 更好地封装了 iOS 应用设置:在 iOS 上,采用了与 Android 类似的方法,并将大部分设置新架构的逻辑封装在
RCTAppDelegate
类中,这将简化未来的升级 - 更好的 iOS 依赖管理:对于库维护者,我们增加了一个新的
install_module_dependencies
函数,在你的podspec
包中调用,这将为新架构安装所有需要的依赖。 - 错误修复和更好的 IDE 支持:修复了用户在新架构工作组中报告的几个错误和问题