在应用程序目录中使用Next.js版本13时,我遇到了Suspense的回退UI问题。
下面是我为获取数据而设置的客户端组件结构:
// page.tsx
'use client';
import UsequeryComp from 'app/components/UsequeryComp';
import { Suspense } from 'react';
export default function Home() {
return (
<Suspense fallback={<div>useQuery loading...</div>}>
<div className="flex items-center justify-center bg-blue-500">
<UsequeryComp />
</div>
</Suspense>
);
}
// UsequeryComp.tsx
'use client';
import { useQuery } from '@tanstack/react-query';
import { axiosPostQuery } from 'app/api/route';
import React from 'react';
import { Post } from '@/type';
const UsequeryComp = () => {
const { data: posts } = useQuery(['posts'], axiosPostQuery);
return (
<ul>
{posts.map((post: Post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
};
export default UsequeryComp;
// api
export const axiosPostQuery = async () => {
await wait(3000);
const response = await axios.get(
'https://jsonplaceholder.typicode.com/posts',
);
return response.data;
};
字符串
在浏览器中访问根页面时,会出现加载指示。但是,在多次刷新页面后,此加载指示间歇性地无法显示,使其看起来像是正在缓存数据。
有没有办法防止这种缓存行为,并确保每次刷新页面时都显示加载指示?目前,在几次刷新后,加载指示停止显示,数据立即返回。
我做了以下工作
将tanstack-query cacheTime和staleTime都更改为0。
我使用axios是因为fetch函数可能被缓存了,我没有给它给予任何缓存设置。
1条答案
按热度按时间yebdmbv41#
尝试使用“queryClient. invalidateQuery”或“queryClient. refetchQuery”。
通过使用tanstack-query中的这些方法,您可以强制重新获取数据。
字符串
另外,确保你的axios的cache-contrl头是'no-cache'或'no-store',以防止默认的浏览器缓存。