React Native Android报错:Undefined is not an object (evaluating 'root._')
我之前在React Native开发时也碰到过类似的问题,给你分享几个亲测有效的排查和解决思路:
这个报错大概率和lodash依赖或者初始化流程有关,你可以按下面的步骤排查:
先确认lodash是否正确安装:
打开终端执行npm list lodash(用yarn的话是yarn list lodash),如果显示"empty"或者找不到依赖,就执行npm install lodash --save或yarn add lodash安装依赖。
另外要避免使用全局的_,尽量用ES模块规范导入:import _ from 'lodash',不要依赖全局挂载的lodash对象。清除React Native缓存,重新构建:
RN的缓存经常会导致各种奇怪的错误,执行以下命令彻底清缓存:- 重启metro服务并重置缓存:
react-native start --reset-cache - 清理Android项目构建缓存:进入项目的
android目录,执行./gradlew clean(Windows系统用gradlew clean) - 卸载设备上已安装的旧应用,再重新运行
react-native run-android
- 重启metro服务并重置缓存:
检查index.js的初始化逻辑:
你提到index.js里有import setup的代码,要确认setup函数里有没有在AppRegistry.registerComponent之前就调用了依赖lodash的逻辑。如果是的话,会导致lodash还未完成加载就被调用,从而触发这个错误。调整顺序,确保所有依赖初始化完成后再执行业务代码。
调试器连接超时一般是网络或配置问题,试试这些方法:
确保设备和电脑在同一网络环境:
如果用真机调试,手机和电脑必须连同一个WiFi;如果是模拟器,打开开发者菜单(Ctrl+M / Cmd+M),进入「Dev Settings」->「Debug server host & port for device」,输入你电脑的本地IP+8081端口(比如192.168.3.10:8081),保存后重启调试。检查8081端口是否被占用:
终端执行lsof -i :8081(Mac/Linux)或者netstat -ano | findstr :8081(Windows),如果有其他进程占用8081端口,杀掉对应的进程后重启metro服务。暂时关闭代理和VPN:
代理、VPN可能会拦截调试器的连接请求,先关掉它们再尝试连接调试器。升级React Native到稳定版本:
旧版本的RN可能存在调试器连接的bug,备份项目后尝试升级到最新稳定版:npm install react-native@latest --save,再重新构建项目。
内容的提问来源于stack exchange,提问作者Lilp

