Files
webstudio/apps/builder/app/shared/client-only.ts
Bogdan Chadkin d0a00a3ebc refactor: render canvas only client side (#3199)
We don't need canvas to be rendered server side either.

```diff
build/server
- 1164 kB
+ 812 kB
```

Removed components metas form static json since we not longer bundle all
components on server.

Also refactor client only component with useSyncExternalStore which
render without waiting for effect commit and avoids hydration errors at
the same time.
2024-04-18 13:58:26 +07:00

21 lines
426 B
TypeScript

import { type ReactNode, useSyncExternalStore } from "react";
export const ClientOnly = ({
fallback,
children,
}: {
fallback?: ReactNode;
children: ReactNode;
}) => {
// https://tkdodo.eu/blog/avoiding-hydration-mismatches-with-use-sync-external-store
const isServer = useSyncExternalStore(
() => () => {},
() => false,
() => true
);
if (isServer) {
return fallback;
}
return children;
};