| 123456789101112131415161718192021 |
- // components/ClientOnly.tsx
- import { useEffect, useState, ReactNode } from 'react';
- interface ClientOnlyProps {
- // 子组件(仅在客户端渲染)
- children: ReactNode;
- // 服务器端渲染时的占位内容(可选,默认 null)
- fallback?: ReactNode | null;
- }
- export default function ClientOnly({ children, fallback = null }: ClientOnlyProps) {
- const [isClient, setIsClient] = useState<boolean>(false);
- useEffect(() => {
- // 仅在客户端执行,标记为客户端环境
- setIsClient(true);
- }, []);
- // 服务器端渲染时显示 fallback,客户端渲染时显示 children
- return isClient ? children : fallback;
- }
|