You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:42:09