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

React Query:如何将404错误响应转换为空数组

React Query处理404转为空数组的方案

完全可以实现,别用你示例里直接修改状态的方式,React Query的data、isError等状态由内部管理,直接修改会导致状态不一致。推荐两种靠谱的实现方式:

方式一:在请求函数内捕获404(最优)

直接在useQuery的queryFn里处理API异常,把404映射为空数组,这样React Query会认为请求成功,自动将data设为空数组,isError保持false:

const { data, isLoading, isError } = useQuery('key', async () => {
  try {
    const res = await apiCall();
    return res.data;
  } catch (err) {
    // 识别404错误,返回空数组
    if (err.statusCode === 404) {
      return [];
    }
    // 其他错误正常抛出,让React Query标记为错误状态
    throw err;
  }
});

方式二:通过缓存更新处理(适合无法修改请求逻辑的场景)

如果不想改动原有的apiCall函数,可以用useQueryClient手动更新缓存,同时让404不触发错误重试:

import { useQuery, useQueryClient } from '@tanstack/react-query';

const queryClient = useQueryClient();

const { data, isLoading, isError } = useQuery('key', apiCall, {
  onError: (err) => {
    if (err.statusCode === 404) {
      // 更新缓存数据,组件会自动拿到空数组
      queryClient.setQueryData('key', []);
    }
  },
  // 404错误不重试,避免无效请求
  retry: (_, err) => err.statusCode !== 404
});

注意

你示例里的setData和setIsError是错误用法,React Query返回的状态是只读的,不能直接修改,必须通过上述方式让React Query内部管理状态。

内容的提问来源于stack exchange,提问作者Aximili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:39:18