目前正在尝试重构我们的项目,以使用服务器组件(应用程序目录),第一个挑战是如何实现无限滚动分页与新的“应用程序”目录。
这是一个过于简单的页面示例:
import OrganisationInterface from "@/interfaces/OrganisationInterface";
async function getData() {
const res = await fetch('http://api.test/v1/organisations?page=1');
if (!res.ok) {
throw new Error('Failed to fetch data');
}
return res.json();
}
export default async function Page() {
const { data } = await getData();
return (
<>
<div className="mx-auto in-h-screen ">
{data && data.map((organisation: OrganisationInterface) => (
<div key={organisation.id}>
{organisation.attributes.title.lt}
</div>
))}
</div>
</>
);
}
我在服务器上预取了10个初始结果,现在我需要向客户端请求添加另外10,20,30个......
或者我应该在服务器端以某种方式做它?我需要一些如何正确实现这一点的想法或例子,以前的解决方案是基于客户端的,使用SWR或ReactQuery。
1条答案
按热度按时间olmpazwi1#
您完全可以在服务器上使用初始批次的项目进行预呈现,然后在用户滚动页面时在客户端获取其他项目。
这里有几个想法和具体的例子。
1.在API路由下实现数据检索逻辑,并在服务器和客户端组件中从该API路由获取数据。
沙盒-https://codesandbox.io/p/sandbox/adoring-browser-vk5k0d?file=%2Fapp%2Fpage.tsx
1.将数据提取功能实现为server action(免责声明:服务器动作当前处于alpha),并将其向下传递到客户端组件。
沙盒-https://codesandbox.io/p/sandbox/stackoverflow-76266563-server-actions-f2gt3o?file=%2Fapp%2Fpage.tsx