已知问题

Chrome开发工具中的"React"选项无法使用#

目前无法使用开发工具中的"React"选项来查看App的组件。这是由于脚本在开发工具插件中的运行方式改变了;它们现在在Web Worker内部运行,插件并不知道,因此无法很好的和React Native进行通讯。
即便如此,你仍然可以使用开发工具的Console和Sources选项,而且可以使用断点来调试JavaScript。为了能够使用Console功能,你必须确认在开发工具下拉菜单中选择入口文件为 ⚙debuggerWorker.js,(默认选择为<top frame>)。

缺失的Android模块和视图#

虽热React Native的Android版本的开发工作晚于iOS版本,但目前大多数视图都在Android上实现了,除了下面几个例外:

视图#

  • Maps —— 我们推荐使用Leland Richardson的react-native-maps,它比我们内部实现的map功能更完善。
  • Android Slider(也叫SeekBar))

模块#

  • Media
  • Android推送通知

某些属性仅仅支持单个平台#

有些属性只能在单个平台上使用,这是由于这些特性仅有单个平台支持或者是尚未在其他平台上实现。所有这些都在JS文档中被@platform标注,并且左侧有一个小标记。

平台一致性#

以下是一些本该(或将要)设计得更通用的API或组件:

  • <ViewPagerAndroid><ScrollView pagingEnabled={true}>功能类似。我们或许希望统一成<ViewPager>

  • ActivityIndicator可以跨平台地渲染一个原生的加载(loading)指示器(目前在iOS上使用ActivityIndicatorIOS,而在Android上使用ProgressBarAndroid

  • ProgressBar可以跨平台渲染一个水平的进度条(目前只在iOS上支持,使用ProgressViewIOS

使用第三方的原生模块#

JS.coach上有很多非常优秀的第三方模块。
在你的项目中集成这些模块应该并不困难,这里有一个实际应用的例子

overflow样式在Android默认为hidden而且无法更改#

这是Android本身的渲染机制所致。我们没有实现这一特性,因为这是个大工程,而且我们还有很多其他重要的任务。
Android的overflow:hidden还有另外一个问题:如果父容器有borderRadius圆角边框样式,那么即便开启了overflow:hidden也仍然无法把子视图超出圆角边框的部分裁切掉。这个问题只存在于Android上,iOS并没有这个问题(子视图的内容不会超出父容器的圆角边框)。你可以在这里看到问题的演示,以及在这里查看这个问题的报告以及后续进展。

视图阴影#

shadow开头的样式现在可以在iOS上应用,而Android上对应的属性(props)是elevation。设置elevation属性就等价于使用原生的elevation API,因而也有同样的限制(比如最明显的就是需要Android 5.0以上版本)。此外还会影响到层叠视图在空间z轴上的顺序。

Android M(6.0)的权限#

当前版本的React Native还不支持Android M的权限模型

Android纯布局(Layout-only)节点#

Android版本的React Native有一个优化的特性:有些视图,只起布局作用而没有对应的原生视图,那么只有它们的布局属性会被传递给子视图。这个优化对于深层次的视图的稳定性很重要因此默认开启。要关闭这个特性,请设置collapsable为false:

<View collapsable={false}>
    ...
</View>

PNG图片的内存问题#

React Native Android 依靠Fresco载入和显示图片。目前我们关闭了下采样(downsampling)(这一特性还不稳定),因此有可能载入较大的PNG图片时会出现内存问题。

react-native init时卡住#

尝试运行react-native init时加上--verbose参数,点这里#2797查看一般可能的原因。
译注:由于众所周知的网络原因,react-native命令行从npm官方源拖代码时会遇上麻烦。请将npm仓库源替换为国内镜像:

npm config set registry https://registry.npm.taobao.org
npm config set disturl https://npm.taobao.org/dist

另,执行init时切记不要在前面加上sudo(否则新项目的目录所有者会变为root而不是当前用户,导致一系列权限问题,请使用chown修复)。 又,react-native.cn中文网提供了完整的绿色纯净新项目包。完整打包全部iOS和Android的第三方依赖,只要环境配置正确,无需科学上网漫长等待,解压后即可直接运行。

文本框的边界(border)#

文本框默认的边界在视图的底部。这个边界有一个内衬(padding),这个padding由系统提供的背景图片所设定,并且无法改变。解决这个问题有两个方案,一是可以不指定高度,这样系统会自动处理,在恰当的位置显示边界;或者干脆通过设定underlineColorAndroid为透明来隐藏边界。