React Native热重载失效求助:iOS模拟器代码修改无更新
解决React Native iOS模拟器热重载无响应+WebSocket错误问题
看起来你的问题核心是RN本地服务器和iOS模拟器之间的WebSocket通信失败,导致热重载完全失效,而且新项目正常说明你的开发环境本身没问题,问题出在现有项目的缓存或配置上。我给你几个针对性的解决方案,按顺序试:
1. 彻底清除所有RN相关缓存(最常用的修复手段)
先把所有可能的缓存清干净,这往往能解决大部分奇怪的热重载问题:
- 打开终端,依次执行这些命令:
执行完最后一条命令后,重新在模拟器里重载(Cmd+R)试试。watchman watch-del-all rm -rf $TMPDIR/react-* rm -rf node_modules && npm install npm start -- --reset-cache
2. 修复模拟器和RN服务器的网络连接
WebSocket错误大概率是连接不上服务器导致的,试试:
- 打开iOS项目的
AppDelegate.m文件,找到jsCodeLocation这一行,把localhost换成你电脑的局域网IP地址(比如192.168.1.100),然后重新编译运行项目。
示例:// 原来的代码 jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios&dev=true"]; // 修改后 jsCodeLocation = [NSURL URLWithString:@"http://192.168.1.100:8081/index.bundle?platform=ios&dev=true"]; - 检查模拟器的网络设置:打开模拟器的
Settings->Wi-Fi,确保连接的网络和电脑一致,并且没有开启代理。
3. 排查端口占用和服务器进程
有时候8081端口被其他程序占用,或者RN服务器进程异常:
- 检查8081端口是否被占用:
如果有输出,用lsof -i :8081kill -9 <进程ID>杀掉占用端口的进程。 - 彻底关闭所有RN相关进程:
把列出的进程全部kill掉,然后重新启动ps aux | grep react-nativenpm start。
4. 重置模拟器的网络状态
你已经试过重置模拟器内容,但可以再试试:
- 关闭模拟器,打开
Xcode->Window->Devices and Simulators,选中你的模拟器,右键选择Erase All Content and Settings,然后重新编译运行项目。
为什么新项目正常?
因为新项目用的是默认配置,没有缓存积累,也没有可能被修改过的配置文件。而现有项目可能因为长期开发积累了缓存,或者某个配置文件(比如AppDelegate、metro.config.js)被无意中修改,导致WebSocket连接失败。
如果以上方法都没用,你可以试试把现有项目的ios目录删掉,然后重新执行react-native eject(注意备份配置),重新生成iOS项目文件,再编译运行。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

