React-Native 错误集锦+解决方案

目录

  1. 'RCTBridgeModule.h' file not found
  2. Runtime is not ready for debugging
  3. No bundle URL present
  4. 闪退(调取本地通讯录,同理其他功能如相册,短信,摄像头,麦克风等)
  5. [真机]Unable to load script from assets index.android.bundle...
  6. Attempt to invoke interface method 'xxx' on a null object reference
  7. Cannot convert argument of type class xxx(ex:java.lang.RuntimeException)
  8. xxx(function name) is not a function
  9. ld: library not found for -lRNSVG-tvOS
  10. Invariant Violation: Element type is invalid...
  11. command+R无法刷新
  12. Invariant Violation: Unable to find node on an unmounted component.
  13. You attempted to set the key _value with the value 0.07264901024010965 on an object that is meant to be immutable and has been frozen.

内容

1. 'RCTBridgeModule.h' file not found

解决方案:
1_ #import "RCTBridgeModule.h"替换成#import <React/RCTBridgeModule.h>
2_ 在Build Settings -> Header Search Paths中添加link$(SRCROOT)/../node_modules/react-native/React
(实际测试用方案1可以解决问题)

2.Runtime is not ready for debugging

Runtime is not ready for debugging

第一次切换到debug模式的时候会出现这个问题
是因为在app页面reload完成后,执行debug的网页还没有打开
解决方案: 打开调试器后重新刷新即可 (例: chrome -> 右键 -> 检查)

3. No bundle URL present

No bundle URL present

解决方案:
1_ 关闭所有的React Packager,重启模拟器
2_ 删除#ProjectName#/ios下的build目录

4. 闪退

用模拟器操作的时候直接闪退,没有提示
使用Xcode启动则会有错误提示
是因为没有在Info.plist里面添加Privacy对应的权限

5. Unable to load script from assets index.android.bundle...

解决方案:在项目根目录输入以下命令
1>mkdir android/app/src/main/assets
2>react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
3>react-native run-android
注:第二步中的index.js是项目根目录下的index文件,在有些版本中是index.android.js

6. Attempt to invoke interface method 'xxx' on a null object reference

原因分析: 代码中对调用的方法传了一个空值或者方法对象本身为空.
解决方案: 检查代码.

7. Cannot convert argument of type class xxx(ex:java.lang.RuntimeException)

原因分析: 传递的值并不是RN可以解析的类型(比如ex中的RuntimeException是因为把catch到error直接传递出去了,RN不能解析,因此报错.
解决方案: 修改为RN可以识别的类型.比如error.toString()

8. xxx(function name) is not a function

原因分析: 方法名写错,一般是出现在调用的地方.

9. ld: library not found for -lRNSVG-tvOS

解决方案: 删除libRNSVG-tvOS.a (xcode打开ios项目,在Linked Frameworks and Libraries中可以找到)

10. Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.

这个错误表示的参数类型不匹配.
例中想要一个string或者class/function但是传入的是object.
在运行的package里面可以找到对应的错误代码.
比如穿的是{<NewComp />} , 换成{() => <NewComp />}即可

11. command+R无法刷新

解决方案: command + shift + k

12. Invariant Violation: Unable to find node on an unmounted component.

问题原因: 我试图通过传递ref给一个新的页面使用,在新页面加载的时候原页面也会刷新,所以拥有这个ref的控件在刷新的时候还没有加载出来,在通过这个空的ref来找对应组件,就会出现提示的问题.也就是所谓的空指针.
解决思路:因为我的需求是获取到元素的绝对坐标,所以我单独用一个方法来获取,然后传递坐标值的方式代替传递ref.

13. You attempted to set the key _value with the value 0.07264901024010965 on an object that is meant to be immutable and has been frozen.

使用Animated制作动画的时候,赋值出现了问题.
一般会有一个警告,从警告里面可以看到是哪里有了问题
比如要赋值给transform.translateX结果写成了trans.translateX

附录

参考链接: React Native开发错误警告处理总结(已解决 !持续更新)