React Native中fetch请求后JS函数失效,无日志输出求助
问题:修改Jest测试用例后React Native网络请求回调失效、热重载异常
修改Jest测试用例后,React Native项目出现以下异常:
- 所有
fetch/axios请求的then或await回调完全不执行,控制台无对应日志输出 - 热重载功能失效
- Flipper显示网络请求已正常完成,但切换回修改前的分支无法恢复问题
- 仅通过重新克隆项目、切换对应分支、执行
npm install及iOS pod安装后,项目才能恢复正常
示例代码:
import * as React from 'react'; import { View, Text } from 'react-native'; const App: React.FC = () => { console.log('Render'); React.useEffect(() => { console.log('Before'); fetch('https://google.com/').then(res => { console.log('Test'); console.log('res', res); }); console.log('After'); }, []); return ( <View style={{ padding: 64, }} > <Text>Test2</Text> </View> ); }; export default App;
排查步骤与需检查的文件
1. Jest配置与缓存
- 检查项目根目录下的
jest.config.js/jest.config.ts,确认是否误改了测试环境的全局配置(比如global.fetch的mock规则) - 执行
npx jest --clearCache清理Jest缓存,同时检查是否存在自定义测试缓存目录未清理
2. Metro缓存与配置
- 彻底重置Metro缓存并清理原生构建缓存:
# 重置Metro缓存 npx react-native start --reset-cache # iOS清理与重装依赖 cd ios && pod deintegrate && rm -rf Pods Podfile.lock && pod install && cd .. # Android清理构建缓存 cd android && ./gradlew clean && cd .. - 检查
metro.config.js,确认模块解析、transformer等配置未被意外修改
3. 依赖锁文件与版本
- 对比正常克隆项目与当前项目的
package-lock.json/yarn.lock,排查是否有依赖版本异常变更 - 检查测试相关依赖(如
jest-fetch-mock、react-native-testing-library)是否存在版本冲突或意外升级
4. 全局测试钩子与Mock文件
- 查看
setupFilesAfterEnv指定的全局钩子文件,确认是否误改了fetch/Promise的全局实现 - 检查项目
__mocks__目录下的文件,尤其是fetch.js、axios.js这类mock文件是否被修改
5. 原生端构建缓存
- iOS:手动删除
~/Library/Developer/Xcode/DerivedData中对应项目的文件夹 - Android:执行
cd android && ./gradlew cleanBuildCache清理gradle构建缓存
内容的提问来源于stack exchange,提问作者Egor
相关产品推荐
相关产品推荐

