mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-10-01 15:48:23 -05:00
33 lines
842 B
TypeScript
33 lines
842 B
TypeScript
import * as React from "react";
|
|
|
|
// credits: https://github.com/sergiodxa/remix-utils/blob/main/src/react/use-hydrated.ts
|
|
|
|
function subscribe() {
|
|
return () => {};
|
|
}
|
|
|
|
/**
|
|
* 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: Disable a button that needs JS to work.
|
|
* ```tsx
|
|
* let hydrated = useHydrated();
|
|
* return (
|
|
* <button type="button" disabled={!hydrated} onClick={doSomethingCustom}>
|
|
* Click me
|
|
* </button>
|
|
* );
|
|
* ```
|
|
*/
|
|
export function useHydrated() {
|
|
return React.useSyncExternalStore(
|
|
subscribe,
|
|
() => true,
|
|
() => false,
|
|
);
|
|
}
|