`
dengzhangtao
  • 浏览: 677287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

React native开发中常见的错误

 
阅读更多
react native环境搭建请移步:react native环境搭建

这里说说react native创建完成之后,运行中出现的常见问题,

问题1:

java.lang.RuntimeException: SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

这个是原因是工程找不到我们的android SDK。

解决方法:在工程的根目录下的android文件下新建一个local.properties的文件(我们可以直接拷贝Android项目的local.properties的文件)。


问题2:

A problem occurred configuring project ':app'.>failed to find Build Tools revision 23.0.1
这个是因为Build Tools revision 23.0.1和我们的sdk里面的版本不一致导致的。

解决方法:这里注意build.gradle和gradle中gradle-wrapper.properties的对应关系。


问题3

Could not install the app on the device, read the error above for details.

这个是因为未找到运行的设备

解决方法:注意在运行命令:react-native run-android之前一定要确保手机已经连接上电脑。
问题4

com.android.ddmlib.InstallException: Failed to establish session

这是小米手机调试的问题,我之前用魅族就没这问题

解决方法:小米手机设置里-------开发者选项---------启用MIUI优化关闭


问题5

SyntaxError:Strict mode does not allow function declaration in a lexically nested。


解决方案:
使用react-native init创建了一个新项目,在package.json中使用的react-native的版本如下:

"dependencies": {
        "react": "15.4.1",
        "react-native": "0.39.1"
}



报出如下图所示的错误:

SyntaxError

SyntaxError:Strict mode does not allow function declaration in a lexically nested statement.


解决办法
第一种解决方案

打开
.\node_modules\react-native\Libraries\Core\InitializeCore.js 112行。
代码如下图:


将function handleError(e, isFatal)替换成var handleError = function(e, isFatal)
如下图所示:


最终执行npm start -- --reset-cache或者reload,解决问题。
第二种解决方案

将react-native版本改成0.38.0也能解决问题。

"dependencies": {
        "react": "15.4.1",
        "react-native": "0.39.1"
}

改成

"dependencies": {
        "react": "15.4.1",
        "react-native": "0.38.0"
}

问题原因

  react-native的源码问题,在use strict严苛模式下,不允许如上的方式声明函数,会编译不通过,fackbook官方应该会会快修复这个问题。感谢阅读,希望能帮到你。


问题6
Could not connect to development server.
来看一张图:

大体意思是:
连接不到开发的服务器。
请按照以下的步骤来修复此问题:
确保包服务器在运行
确保你的设备或者模拟器连接着电脑,并且手机打开了USB调试模式,然后在cmd中运行adb devices来查看已经连接好的设备列表
确保飞行模式是关闭的
如果是使用真机来开发,输入 adb reverse tcp:8081 tcp:8081来检查设备
输入IP:8081(这个大家都会)
首先我是启动了服务的,并且打开了浏览器调试:
[javascript] view plain copy

    http://localhost:8081/index.android.bundle?platform=android 

查看端口信息
[javascript] view plain copy

    adb reverse tcp:8081 tcp:8081 


在没有的话可以打开dev Settings输入IP:8081调试就不多说了。

问题7
Could not install the app on the device, read the error above for details.
这个是因为react-native版本升级了,但是在项目的build.gradle没有改成升级的版本号。

问题8
com.android.ddmlib.InstallException: Failed to install all

解决方案:小米手机设置里-------开发者选项---------启用MIUI优化关闭

其他问题补充:

Q:RN所支持的最低iOS和Android版本?

A:Android >= 4.1 (API 16)

iOS >= 7.0

Q:RN和cordova/phonegap是一个东西吗?

A:不一样。RN不是一个webview(但包含了webview组件),不能直接复用web页面代码。RN的性能接近原生,超过cordova/phonegap。

Q:可以使用现有的js库吗?

A:由于RN理论上更接近nodejs的运行环境,所以对nodejs的库兼容更好一些。浏览器端的js库,涉及到DOM、BOM、CSS等功能的模块无法使用,因为RN的环境中没有这些东西

Q:如何升级RN版本?

A:请用编辑器打开项目目录中的package.json,找到类似下面的一行配置

"react-native": "0.31.0"


Q:应该使用什么IDE开发?

A:虽然常用的JS编辑器很多,但由于RN大量使用jsx和es6语法,目前只有sublime text(通过插件)和webstorm(10以上版本)提供了良好的支持。笔者推荐webstorm,因为它有更完善的语法提示和补全。另外虽然主要的业务逻辑是使用js开发,但仍然要依赖于原生的编译/调试环境,所以你还需要同时运行Xcode(iOS)或Android Studio(android)等。


Q:如何开启调试功能?

A:点击iOS模拟器顶部的Hardware菜单,选择Shake Gesture(对应真机摇一摇),会自动弹出如下图的菜单。

安卓模拟器则是点击菜单键,真机上没有菜单键的,摇一摇即可。

选择Debug in Chrome即会启动Chrome作为运行和调试环境(注意此时JS引擎为Chrome的V8,与iOS真机的javascriptCore引擎存在一些差异)。选择Inspect Element即可以像调试网页元素一样查看布局元素的样式,但比较简陋。React Devtools插件可装可不装,它只用来查看布局,不影响调试,且在目前的版本(>0.13)中还无法正常加载。



Q:使用ListView时报错:Sticky header index 0 was outside the range {...}

A:看起来是个数组越界错误,但多数情况下是由于ListView的子组件渲染错误(如套数据时没有检查undefined等)引起,而非ListView本身的问题。


Q:在使用Navigator的同时使用ListView或ScrollView,后两者的头部会多出一些空间。

A:将automaticallyAdjustContentInsets属性设为{false}.
分享到:
评论

相关推荐

    reactnative显示本地图片

    在React Native中显示本地图片是移动应用开发中的常见任务,特别是在使用JavaScript进行混合移动开发时。React Native允许开发者使用JavaScript来构建原生的iOS和Android应用程序,提供了丰富的组件库,其中包括用于...

    reactNative之Webview与h5互调

    在React Native开发中,Webview组件是一个非常关键的组成部分,它允许我们集成H5页面到原生应用中,实现原生应用与Web内容的交互。本文将深入探讨React Native中的Webview与H5的互调机制,以及如何利用它们来增强...

    React Native跨平台移动应用开发 第一版

    React Native的文件名称列表中包含了一个PDF文档,即"React Native跨平台移动应用开发.pdf",该文档可能详细讲解了以下几个关键知识点: 1. **安装与设置**:如何配置开发环境,包括安装Node.js、设置React Native ...

    ReactNative实现音乐播放

    React Native 是一个由Facebook开发的开源框架,它允许开发者使用JavaScript和React的组件化思想来构建原生的iOS和Android应用程序。在这个“React Native实现音乐播放”的主题中,我们将深入探讨如何利用React ...

    简单易用的ReactNative截屏监听系统截屏事件组件iosandroid

    在JavaScript开发中,混合移动开发允许开发者利用Web技术来开发跨平台的移动应用,而React Native正是这种技术的一个代表。通过React Native,开发者可以编写一次代码,然后在多个平台上运行,极大地提高了开发效率...

    ReactNative用javascript开发移动应用.中文完整版.pdf

    此外,`Expo`是一个完整的React Native开发环境,它包含了构建、预览、调试和分发应用所需的所有工具,简化了开发流程,尤其适合快速原型制作和小型项目。 总的来说,React Native是一个强大的工具,它降低了跨平台...

    react native windows 环境搭建

    ### React Native for Windows 开发环境搭建指南 #### 一、概述 React Native 是 Facebook 推出的一款用于构建原生移动应用的框架,它允许开发者使用 JavaScript 和 React 构建 iOS 和 Android 应用。本文档将详细...

    ReactNative开发的iOS和Android弹出对话框

    9. **错误处理和调试**:在实际开发中,可能会遇到平台兼容问题、样式冲突等问题,需要熟练使用React Native的调试工具和日志输出进行问题排查。 10. **性能优化**:考虑到弹出对话框可能会影响应用的性能,开发者...

    REACT NATIVE跨平台移动项目实战

    移动项目的生命周期管理和状态管理是React Native开发中的重要环节。React组件有自己的生命周期方法,如`componentDidMount`、`shouldComponentUpdate`等,这些方法帮助我们控制组件的创建、更新和销毁。另外,随着...

    ReactNative的音频录制库

    在JavaScript开发-混合移动开发领域,这样的库极大地扩展了React Native的功能,使得开发者能够充分利用其灵活性和高效性。 React Native本身是一种由Facebook开发的开源框架,它允许使用JavaScript和React组件来...

    Android 项目中嵌入 ReactNative

    在Android项目中嵌入ReactNative是一项常见的跨平台开发技术,它允许开发者利用JavaScript和React库来构建原生的Android应用。ReactNative是由Facebook推出的开源框架,它的核心理念是“Learn once, write anywhere...

    ReactNative实现的文件上传功能支持任意文件上传

    在React Native中实现文件上传功能是一项常见的需求,尤其在混合移动开发中,JavaScript与原生平台的结合使得这种功能的实现变得可能。React Native是Facebook推出的一个框架,它允许开发者使用JavaScript来构建原生...

    reactnative高德地图拖拽定位demo使用webview实现

    在React Native应用开发中,有时候我们需要集成地图功能,比如实现拖拽定位等交互式操作。在本案例中,我们探讨的是如何使用React Native与Webview相结合,通过高德地图API来实现在移动设备上的拖拽定位功能。这个...

    ReactNative网路及本地缓存

    ReactNative是Facebook开发的一款用于构建原生移动应用的框架,它允许开发者使用JavaScript和React库来编写跨平台的iOS和Android应用。在这个“ReactNative网路及本地缓存”的主题中,我们将深入探讨如何在React...

    React Native 视频播放器

    总的来说,React Native 视频播放器的实现涉及了跨平台开发、JavaScript编程、组件化设计以及多媒体处理等多个领域的知识,是React Native应用开发中的一个重要部分。通过学习和实践,开发者不仅可以创建出功能丰富...

    ReactNative中调用相机相册

    在React Native应用开发中,与用户交互是必不可少的,其中包括访问设备的相机和相册功能。React Native提供了各种库来简化这些原生操作,其中`react-native-image-picker`是一个常用的库,它允许开发者轻松地调用...

    REACT NATIVE跨平台移动应用开发_第2版_阙喜涛_完整版

    10. **问题排查与社区支持**:书中会提及如何查找和解决常见错误,以及如何利用React Native社区资源,如Stack Overflow、GitHub等,获取帮助和反馈。 总之,《React Native跨平台移动应用开发_第2版》全面覆盖了...

    reactnative异常处理库

    React Native 异常处理库是专门为在React Native框架下开发的混合移动应用提供错误管理和调试支持的工具。React Native允许开发者使用JavaScript编写原生移动应用,但JavaScript代码的运行环境中可能会遇到各种错误...

    Learning React Native

    《Learning React Native》是针对初学者的一份指南,旨在帮助读者掌握React Native技术,并为微信小程序的开发打下坚实的基础。React Native是由Facebook推出的开源框架,它允许开发者使用JavaScript和React来构建...

    swift-iOSARKit的ReactNative绑定

    在iOS应用开发中,ARKit(Augmented Reality Kit...这个过程涉及到的知识点广泛,涵盖了AR技术、Swift编程、React Native开发以及原生模块的集成等多个方面。掌握这些知识,开发者可以创建出富有创新和吸引力的AR应用。

Global site tag (gtag.js) - Google Analytics