目前正在尝试切换到nextjs 13,在获取返回时遇到了问题。我正在使用新的AppRouter,文件夹结构如下所示:
/app
/context
index.tsx
/measurement
route.ts
字符串
我有一个上下文提供程序/app/context/index.tsx
:
export const MeasurementContext = createContext([]);
const fetcher = (...args) => fetch(...args);
const MeasurementProvider = ({ children }) => {
const [elements, setElements] = useState([]);
const [useSwr, setUseSwr] = useState(false);
const { data, isLoading, error } = useSWR(useSwr ? "/measurement" : null, fetcher);
useEffect(() => {
if (!elements.length) {
setUseSwr(true);
}
}, [elements]);
useEffect(() => {
setUseSwr(false);
data && setElements(data);
}, [data]);
return <MeasurementContext.Provider value={elements}>{children}</MeasurementContext.Provider>;
};
export default MeasurementProvider;
型
路由处理器/app/measurement/route.ts
:
export async function GET() {
try {
const data = await getMeasurements();
if (data.length) {
return data;
}
} catch (e) {
console.error(e, "error msg");
}
}
型
我看到一个有效的返回数据从路由,但在上下文提供程序,我得到了一个500状态与内部服务器错误。
这是我尝试过的:
- 使用NextResponse以json形式返回数据
- 我尝试使用通用的fetch和移动fetch函数到几个组件来测试响应的差异
如何在NextJS 13中将本地获取的路由数据与React上下文结合起来?
1条答案
按热度按时间nuypyhwy1#
看起来您可能错过了将数据作为路由处理程序中的NextResponse对象返回的步骤。
在/app/measurement/route.ts文件中,您应该使用NextResponse.json()返回数据。以下是您的操作方法:
字符串
这将确保数据作为JSON响应返回,然后可以由上下文提供程序使用。
此外,确保上下文提供程序中的fetcher函数正确处理响应并将其转换为JSON。下面是一个示例,说明你可以如何做到这一点:
型
如果响应状态不正常(200-299),这个fetcher函数将抛出一个错误,否则它将以JSON的形式返回响应数据。这可以帮助您捕获和处理SWR钩子中的错误。