Next.js中使用SWR结合Axios获取数据返回undefined问题排查
问题排查与修复
先看你代码里的几个核心问题:
SWR请求Key的语法错误:
你写的useSWR(${getcompany, getProfile)存在模板字符串未闭合的问题,少了一个}。如果是固定请求路径,直接写'/getcompany'即可;如果getcompany是变量,要写成${getcompany}(注意闭合符号)。这个语法错误会导致SWR无法正确识别请求标识,大概率请求没正常触发,所以data返回undefined。错误处理逻辑不符合SWR约定:
在getProfile的catch块里,你直接return error,但SWR的规则是请求失败时需要抛出错误,而非返回错误。如果return error,SWR会把错误当成成功返回的数据,导致data变成error对象,同时error字段反而为空。正确写法是:catch (error) { throw error; }额外检查项:
- 确认
state?.in_memory是否持有有效的鉴权Token,如果这个值是undefined,请求会因鉴权失败返回错误,结合之前错误处理的问题,也会导致data异常。 - 检查
axiosPrivate的拦截器配置,确保请求前正确添加了Authorization头,或处理了Token过期等异常场景。
- 确认
修复后的代码示例:
const getProfile = async()=>{ try { const res = await axiosPrivate.get<axiosGetCompanyProfile>(`/getcompany`, { withCredentials: true, headers: {Authorization: `${state?.in_memory}`} }); console.log(res.data, 'mmmmnn') return res.data; } catch (error) { throw error; } } // 修复请求Key,这里假设是固定路径 const { data, error, isLoading } = useSWR('/getcompany', getProfile)
内容的提问来源于stack exchange,提问作者princekings
相关产品推荐
相关产品推荐

