如何在RTK Query中将404错误视为成功响应?
解决方案
当然可以实现,你可以通过两种方式让Redux-Toolkit把该端点的404错误视为成功响应并返回空数组:
方法一:通过validateStatus标记404为成功状态,再转换响应
这种方式让RTK Query直接把404判定为合法的成功响应,之后在响应转换逻辑里返回空数组,是最推荐的方案:
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; const yourApi = createApi({ baseQuery: fetchBaseQuery({ baseUrl: '你的基础API地址', // 自定义状态码校验规则:200和404都视为成功 validateStatus: (status) => status === 200 || status === 404, }), endpoints: (builder) => ({ getTargetData: builder.query({ query: () => '你的目标端点路径', // 转换响应:如果是404状态,返回空数组;否则返回原响应 transformResponse: (response, meta) => { if (meta?.response?.status === 404) { return []; } return response; }, }), }), });
方法二:在transformErrorResponse中处理404错误
如果你不想修改全局的状态码校验规则,也可以在错误转换逻辑里捕获404并返回空数组,但需要注意:这种方式下RTK Query依然会将其标记为错误状态,你需要在组件或业务逻辑中额外处理这个"特殊错误":
transformErrorResponse: (error, meta) => { console.log('fetch error', error); // 判断是否是404错误 if (meta?.response?.status === 404) { // 返回空数组作为错误数据 return []; } // 其他错误保持原逻辑返回 return error; },
之后在使用该查询的组件中,你可以这样处理:
const { data, error } = useGetTargetDataQuery(); // 如果是404对应的错误,用空数组替代 const finalData = data || (error === [] ? [] : null);
不过更推荐第一种方法,因为它能让404完全走成功响应的逻辑,不需要额外处理错误状态。
内容的提问来源于stack exchange,提问作者Walter Monecke
相关产品推荐
相关产品推荐

