React Native 0.50版本新功能简介

简介:

React Native在2017年经历了众多版本的迭代,从本人接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案。虽然,目前存在着很多的功能和性能的缺失,但是不可否认的是React Native确实在进步。

本文主要从以下几个方面来对React Native0.50+进行讲解:

  • 在兼容性方面新增了对Android8.0、iPhone X的支持;
  • 在API方面为TimePicker添加了打开方式的API,另外允许在构建Android项目的时候指定applicationId;
  • 在组件方面,新添加了支持侧滑显示菜单的SwipeableFlatList,以及SafeAreaView。
  • 修复了一些关键性的Bug;

Image组件

React Native 0.50版本中 Image组件迎来了比较大的一个特性的改变,即在React Native 0.50及以上版本中Image不在支持包裹内容。例如:

<Image style=
       resizeMode="center"
       source=>
    <Text>《React Native移动开发实战》</Text>
</Image>

以上代码在0.50之前是可以正常运行的,在0.50上运行会报:

Unhandled JS Exception: Error: The <Image> component cannot contain children. If you want to render content on top of the image, consider using aboslute positioning.

如果要在0.50+版本中使用Image组件,可以按照下面的用法:

<Image style=
       resizeMode="center"
       source=/>
 <Text>《React Native移动开发实战》</Text>

其他重大变更

  1. ReactShadowNode由类被抽象成了接口,代替他的是ReactShadowNodeImpl,这是来自底层的变更,对上层API无影响。
  2. enableBabelRCLookup(启用BabelRCL查找),由原来的默认开启改为了默认关闭,改过之后Metro只会关注项目的.babelrc文件。在之前Metro会关注node_modules下的.babelrc文件,这样将会导致一些问题,因为它没有Babel的版本,也没有node_modules/randompackage/.babelrc所需的plugins/presets。现在,从0.50版本之后getEnableBabelRCLookup默认返回false,从而避免了这一问题。如果你不想使用这一改变,那么可以这样配置:

创建一个rn-cli.config.js文件,并添加:

module.exports = {
    getEnableBabelRCLookup() {
      return true;
    },
  };

然后,在node_modules下修改.babelrc :

    {"plugins": ["dummy"]}

修复的系统bug

在0.50版本中,修复的系统bug有:

Android

1,修复了在Android SDK 15及以下版本设置背景的Bug。在Android中设置View的背景在SDK15及以下和以上和的API是不一样的,在之前的RN版本中没有做差异判断,所以会导致在低版本设置背景的Bug,在0.50及以上版本底层实现上添加了ViewHelper工具类,当设置背景时会根据当前SDK版本是16及以上或以下进行做不同的处理;

处理的源码如下:

public class ViewHelper {
 public static void setBackground(View view, Drawable drawable{ 
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
 view.setBackground(drawable); 
 } else { 
 view.setBackgroundDrawable(drawable);
    } 
  }

2,修复了slider的minimumTrackTintColor 和 maximumTrackTintColor在Android和iOS上颜色颠倒的问题。例如:

<Slider
    style=
    minimumTrackTintColor="red"
    maximumTrackTintColor="blue"
  />

显示效果如下:

这里写图片描述

3,修复了Android 4.1-4.3 WebView的Bug。

在0.50之前的版本当使用WebView的baseUrl时在Android 4.1-4.3会显示出html源码,这是因为在Android 4.1-4.3中WebView不支持text/html的charset=utf-8的MIME type所导致的。

4,修复了View Style的overflow hidden问题。

很久以来overflow样式在Android默认为hidden而且无法更改。Android的overflow:hidden还有另外一个问题:如果父容器有borderRadius圆角边框样式,那么即便开启了overflow:hidden也仍然无法把子视图超出圆角边框的部分裁切掉。

5,修复了Java到C++到JS ViewManagers的交互问题;

6,修复了DeviceIdentity(设备标识);

ios

修复了React/RCTJavascriptLoader.mm的Content-Type检查问题,在之前RCTJavascriptLoader对Content-Type的支持是有缺陷的,只能匹配application/javascript或text/javascript两种类型,现在的做法是Content-Type对以application/javascript或text/javascript开头的Content-Type都可以支持;

新增功能

0.50版本新增了很多的功能,本文只针对某些重点进行讲解,详细的还请阅读官方资料。通用的功能有:

通用

  • 新增SwipeableFlatList组件,SwipeableFlatList是在FlatList的基础上添加了侧滑显示菜单的功能,类似于侧滑删除的效果。我们知道SwipeableListView,是React Native 0.27上添加的一个支持侧滑显示菜单的ListView,不过ListView已经不推荐使用了。
  • 引入SafeAreaView,SafeAreaView用于包裹其他View,它会自动应用填充布局中不足的一部分,但不包括navigation bars, tab bars, toolbars等视图。

Android

TimePicker

TimePicker添加了mode (enum('clock', 'spinner', 'default')) 来控制TimePicker的打开模式。

TimePicker是一个老的API了,通过TimePicker组件可以打开Android原生的时间选择对话框。Android 5以下的设备只支持spinner模式,Android 5及以上设备支持clock, spinner两种模式:
Android < 5的显示方式如下:
这里写图片描述

Android > 5的显示方式如下:
这里写图片描述

applicationId

运行在构建的时候指定Android App的applicationId(Android应用的身份ID,应用的唯一标识);

RAM

Added Android support for loading multiple RAM bundles。

iOS方面

DeviceInfo

DeviceInfo 新增DeviceInfo.isIPhoneX_deprecatedAPI来供开发者判断当前设备是不是iPhone X,带有小刘海的iPhone X的屏幕比其他iPhone 手机的屏幕拥有更大高度,所以对于界面布局来说,在iPhone X上需要特别适配。
DeviceInfo是React Native 0.44新增一个类专门提供屏幕尺寸,字体缩放等信息。

Modal组件

Modal组件新增支持onDismiss属性,这个onDismiss接受一个function,当Modal关闭的时候会回调onDismiss。

<Modal
   onDismiss={()=>{
     console.log("Modal is dismiss");
      }
      }
/>

除了上面介绍的更新内容之外,还有很多的东西,这里就不再介绍,大家可以到RN中文网查看相关最新知识。

目录
相关文章
|
4月前
|
前端开发 开发者 UED
React 18 与之前版本的主要区别
【10月更文挑战第12天】 总的来说,React 18 的这些区别体现了 React 团队对于提升应用性能、用户体验和开发效率的持续努力。开发者需要适应这些变化,充分利用新特性来构建更出色的应用。同时,随着技术的不断发展,React 也将继续演进,为开发者带来更多的创新和便利。
|
7月前
|
前端开发 JavaScript Android开发
React Native跨平台开发实战
【7月更文挑战第21天】React Native为跨平台移动应用开发提供了一种高效且强大的解决方案。通过本文的学习,你应该能够掌握React Native的基本概念和实战步骤,并开始在你的项目中使用React Native进行开发。随着你对React Native的深入理解,你将能够利用其强大的功能来构建更加复杂和高效的移动应用。
|
7月前
|
前端开发 JavaScript
react18【系列实用教程】useState —— 声明响应式变量(2024最新版)含useState 的异步更新机制,更新的合并,函数传参获取更新值,不同版本异步更新差异,更新对象和数组
react18【系列实用教程】useState —— 声明响应式变量(2024最新版)含useState 的异步更新机制,更新的合并,函数传参获取更新值,不同版本异步更新差异,更新对象和数组
371 0
|
8月前
|
Dart 前端开发 JavaScript
探索移动应用开发中的跨平台解决方案:Flutter与React Native的比较
在移动应用开发领域,选择合适的跨平台解决方案是关键。本文将深入分析Flutter和React Native这两大主流框架,从性能、开发效率、社区支持等方面进行比较,帮助开发者做出明智的选择。
99 0
|
8月前
|
前端开发 自动驾驶 程序员
鸿蒙? 车载?Flutter? React Native? 为什么我劝你三思,说点不一样的
本文探讨了在信息技术快速发展的背景下,开发者如何选择学习路径。作者提倡使用终局思维来规划职业发展,考虑技术的长远影响。终局思维注重长远目标、系统分析、反向规划和动态调整。以车载开发为例,预测未来智能汽车可能由语音助手主导,而非依赖平板界面。此外,作者建议不要过分投入打工状态,应思考创建自己的产品,如App,以实现技能补充和额外收入。选择对未来发展和自主性有益的技术,如Kotlin,比盲目追求热点更为重要。做减法和有标准的选择,能帮助减轻焦虑,实现更高效的成长。关注公众号“AntDream”获取更多相关内容。
167 1
|
8月前
|
开发框架 前端开发 JavaScript
移动应用开发中的跨平台策略:Flutter与React Native的比较
在移动应用领域,跨平台解决方案已成为开发者追求高效、成本效益和广泛覆盖的关键。本文深入探讨了两种领先的跨平台框架——Flutter和React Native,从技术架构、性能、社区生态及实际应用案例四个维度进行全面对比分析。通过这一比较,旨在为移动应用开发者提供选择合适框架的参考依据,帮助他们根据项目需求做出明智的决策。
|
8月前
|
前端开发 iOS开发 Android开发
React Native跨平台开发实战:从零到一
学习React Native跨平台开发,首先安装Node.js和React Native CLI,设置Android/iOS环境。使用CLI创建项目,如`npx react-native init MyProject`。运行应用:`npx react-native run-android`或`run-ios`。编写组件,如在App.js中创建Hello World。添加样式,安装第三方库如react-native-vector-icons,使用react-navigation进行路由和导航。
144 2
|
9月前
|
前端开发 JavaScript 开发者
React Hooks 是在 React 16.8 版本中引入的一种新功能
【5月更文挑战第28天】React Hooks 是在 React 16.8 版本中引入的一种新功能
80 1
|
9月前
|
前端开发 JavaScript Android开发
使用React Native开发跨平台移动应用的技术详解
【5月更文挑战第22天】本文详述了使用React Native开发跨平台移动应用的技术,该框架由Facebook推出,基于JavaScript,支持iOS和Android。React Native通过JNI/JSI实现JavaScript到原生代码的转换,提供高效性能和原生体验。其优势包括跨平台性、原生体验、开发速度及社区支持。开发流程涉及环境搭建、项目创建、编码、调试与测试,以及构建与发布。注意事项包括性能优化、平台适配、利用第三方库和持续学习。React Native为开发者构建高质量跨平台应用提供了便捷途径,未来潜力无限。
|
9月前
|
开发框架 移动开发 前端开发
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
【5月更文挑战第14天】Uniapp和React Native是热门的跨平台移动开发框架。Uniapp以其一套代码多端运行、丰富的组件生态和较低的学习曲线受到青睐,适合快速开发简单应用。React Native基于React,拥有活跃社区和优秀性能,适合复杂应用。React Native在性能上略胜一筹,尤其在需要接近原生体验的场景。Uniapp的官方组件弥补了社区资源不足。选择时需考虑开发效率、性能需求、团队技术栈和社区支持。
2229 1
【Uniapp 专栏】Uniapp 与 React Native 的对比分析