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

NextJS中useSWR的fetcher返回正常但主函数数据为undefined问题排查

问题分析与解决

我一眼就发现问题所在啦——你的**fetcher函数没有返回异步操作的结果**!

先看你当前的fetcher代码:

const fetcher = (url) => {
 fetch(url)
 .then((r) => r.json())
 .then((data) => {
 return { user: data?.user || null };
 });
};

这里你调用了fetch()发起请求,但没有把整个Promise链返回出去。fetcher函数实际上默认返回了undefined,而不是包含请求数据的Promise——这就导致useSWR无法获取到异步请求的结果,自然data一直是undefined。

修正方案

只需要给fetch()前面加上return,让fetcher返回整个Promise链就行:

const fetcher = (url) => {
 return fetch(url) // 这里补上return!
 .then((r) => r.json())
 .then((data) => {
 return { user: data?.user || null };
 });
};

或者用箭头函数的隐式返回写法,代码更简洁:

const fetcher = (url) => 
 fetch(url)
 .then((r) => r.json())
 .then((data) => ({ user: data?.user || null }));

补充建议:给fetcher加上错误处理

为了让useSWR能正确捕获请求失败的状态,你可以给fetcher加上HTTP错误和异常处理:

const fetcher = (url) => {
 return fetch(url)
 .then((r) => {
 if (!r.ok) throw new Error('请求失败'); // 处理4xx/5xx这类HTTP错误
 return r.json();
 })
 .then((data) => ({ user: data?.user || null }))
 .catch((err) => {
 console.error('获取用户数据失败:', err);
 throw err; // 把错误抛出去,让useSWR捕获到error状态
 });
};

这样修改后,useSWR就能正确拿到请求返回的data,user也不会再是undefined啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:08:14