// 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(false); useEffect(() => { // 仅在客户端执行,标记为客户端环境 setIsClient(true); }, []); // 服务器端渲染时显示 fallback,客户端渲染时显示 children return isClient ? children : fallback; }