在使用Next.js的getServerSideProps
函数与SWR(Stale-While-Revalidate)结合时,如果在验证期间显示initialData
,这通常是因为SWR在服务器端渲染(SSR)期间没有获取到数据,因此回退到了初始数据。
Next.js: 是一个流行的React框架,用于构建服务器端渲染(SSR)和静态站点生成(SSG)的应用程序。
getServerSideProps: 是Next.js中的一个函数,它在每次请求时在服务器端执行,用于获取页面所需的数据。
SWR: 是一个React Hooks库,用于数据获取和缓存。它提供了自动重新验证、错误处理和回退机制等功能。
initialData: 是SWR中的一个属性,用于在数据获取完成之前提供一个初始值。
getServerSideProps
可以在服务器端获取数据,减少客户端的加载时间,并提供更好的SEO。getServerSideProps
适用于每次请求都需要最新数据的场景,而SWR适用于需要实时更新但又不想频繁请求数据的场景。问题: 当与getServerSideProps
一起使用时,带有SWR的Next.js在验证期间显示initialData
。
原因: 这通常是因为在服务器端渲染期间,SWR没有成功获取到数据,因此使用了initialData
作为回退。
getServerSideProps
中正确获取数据,并将其作为props传递给页面组件。export async function getServerSideProps() {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return {
props: {
initialData: data,
},
};
}
initialData
作为参数传递。import useSWR from 'swr';
function MyPage({ initialData }) {
const { data, error } = useSWR('key', fetcher, { initialData });
if (error) return <div>Failed to load</div>;
if (!data) return <div>Loading...</div>;
return <div>{data}</div>;
}
const { data, error } = useSWR(`/api/data?${ Date.now() }`, fetcher, { initialData });
通过以上步骤,可以确保在服务器端渲染期间,SWR能够正确获取到数据,并在验证期间显示正确的数据,而不是回退到initialData
。
领取专属 10元无门槛券
手把手带您无忧上云