带Suspense的Next.js:Fallback UI在刷新时无法恢复

4xy9mtcn  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

在应用程序目录中使用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函数可能被缓存了,我没有给它给予任何缓存设置。

yebdmbv4

yebdmbv41#

尝试使用“queryClient. invalidateQuery”或“queryClient. refetchQuery”。
通过使用tanstack-query中的这些方法,您可以强制重新获取数据。

import { useQuery, useQueryClient } from '@tanstack/react-query';

const queryClient = useQueryClient();

// To refetch a query when a certain condition occurs
const refetchData = () => {
  queryClient.refetchQueries(['myData']);
};

// To invalidate a query, marking it as stale
const invalidateData = () => {
  queryClient.invalidateQueries(['myData']);
};

字符串
另外,确保你的axios的cache-contrl头是'no-cache'或'no-store',以防止默认的浏览器缓存。

相关问题