React-Native 错误集锦+解决方案
目录
- 'RCTBridgeModule.h' file not found
- Runtime is not ready for debugging
- No bundle URL present
- 闪退(调取本地通讯录,同理其他功能如相册,短信,摄像头,麦克风等)
- [真机]Unable to load script from assets index.android.bundle...
- Attempt to invoke interface method 'xxx' on a null object reference
- Cannot convert argument of type class xxx(ex:java.lang.RuntimeException)
- xxx(function name) is not a function
- ld: library not found for -lRNSVG-tvOS
- Invariant Violation: Element type is invalid...
- command+R无法刷新
- Invariant Violation: Unable to find node on an unmounted component.
- You attempted to set the key
_value
with the value0.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