Files
rn-app/hooks/useClientOnlyValue.web.ts

34 lines
1006 B
TypeScript
Raw Normal View History

2025-11-06 16:37:01 +08:00
/**
* Client-only value Hook (Web version)
2025-11-13 16:47:10 +08:00
*
2025-11-06 16:37:01 +08:00
* This hook is used to provide different values for server-side rendering (SSR)
* and client-side rendering on web platforms.
2025-11-13 16:47:10 +08:00
*
2025-11-06 16:37:01 +08:00
* On web, we use `useEffect` to detect if we're on the client or server,
* since `useEffect` is not invoked during server rendering.
2025-11-13 16:47:10 +08:00
*
2025-11-06 16:37:01 +08:00
* @param server - Value to use during server-side rendering
* @param client - Value to use during client-side rendering
* @returns The appropriate value based on the rendering context
2025-11-13 16:47:10 +08:00
*
2025-11-06 16:37:01 +08:00
* @example
* ```tsx
* // Disable header on server, enable on client
* headerShown: useClientOnlyValue(false, true)
* ```
*/
import React from 'react';
// `useEffect` is not invoked during server rendering, meaning
// we can use this to determine if we're on the server or not.
export function useClientOnlyValue<S, C>(server: S, client: C): S | C {
const [value, setValue] = React.useState<S | C>(server);
2025-11-13 16:47:10 +08:00
2025-11-06 16:37:01 +08:00
React.useEffect(() => {
setValue(client);
}, [client]);
return value;
}