PersonsFetcher
是一个服务器组件,它从API获取数据,然后将其传递给客户端组件,以交互方式呈现数据(过滤、排序等).其他元素Button
和PersonModal
(有一个用于创建新Person的表单)不需要提取数据即可工作,所以我将它们放在PersonsFetcher
之外.
'use client';
import { Button } from '@/components/ui/button';
import { ListPlus } from 'lucide-react';
import PersonModal from '@/components/PersonModal';
import { useState } from 'react';
import PersonsFetcher from '@/components/PersonsFetcher';
export default function PersonsPage() {
const [isModalOpen, setIsModalOpen] = useState(false);
return (
<>
<Button onClick={() => setIsModalOpen(true)}>
<ListPlus className="mr-2 h-4 w-4" /> Add new resource
</Button>
<Suspense fallback={<div>Loading...</div>}>
<PersonsFetcher />;
</Suspense>
<PersonModal
isOpen={isModalOpen}
setIsOpen={setIsModalOpen}
/>
</>
);
}
如您所见,'use client'
将使<PersonsFetcher>
成为客户端组件(因此,在Next.js中产生错误).但是我需要'use client'
才能用useState
.
如何解决这一困境?