Files
SnowLuma/.pnpm-store/v11/files/04/2d8ccbe6596b86e0f83c9e9cb4496f943b0dcb67610695f7486da38891da3556b35701a7a71b573c3f47f317073a66f7c7ba12e65e9d6ca2a1ad85afc4cfe2
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

53 lines
1.6 KiB
Plaintext

"use client";
import React from "react";
import { jsx } from "react/jsx-runtime";
//#region src/ClientOnly.tsx
/**
* Render the children only after the JS has loaded client-side. Use an optional
* fallback component if the JS is not yet loaded.
*
* @example
* Render a Chart component if JS loads, renders a simple FakeChart
* component server-side or if there is no JS. The FakeChart can have only the
* UI without the behavior or be a loading spinner or skeleton.
*
* ```tsx
* return (
* <ClientOnly fallback={<FakeChart />}>
* <Chart />
* </ClientOnly>
* )
* ```
*/
function ClientOnly({ children, fallback = null }) {
return useHydrated() ? /* @__PURE__ */ jsx(React.Fragment, { children }) : /* @__PURE__ */ jsx(React.Fragment, { children: fallback });
}
/**
* Return a boolean indicating if the JS has been hydrated already.
* When doing Server-Side Rendering, the result will always be false.
* When doing Client-Side Rendering, the result will always be false on the
* first render and true from then on. Even if a new component renders it will
* always start with true.
*
* @example
* ```tsx
* // Disable a button that needs JS to work.
* let hydrated = useHydrated()
* return (
* <button type="button" disabled={!hydrated} onClick={doSomethingCustom}>
* Click me
* </button>
* )
* ```
* @returns True if the JS has been hydrated already, false otherwise.
*/
function useHydrated() {
return React.useSyncExternalStore(subscribe, () => true, () => false);
}
function subscribe() {
return () => {};
}
//#endregion
export { ClientOnly, useHydrated };
//# sourceMappingURL=ClientOnly.js.map