@base-ui-components/react
Version:
Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
45 lines (43 loc) • 1.59 kB
JavaScript
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NoSsr = NoSsr;
var React = _interopRequireWildcard(require("react"));
var _useIsoLayoutEffect = require("@base-ui-components/utils/useIsoLayoutEffect");
/**
* NoSsr purposely removes components from the subject of Server Side Rendering (SSR).
*
* This component can be useful in a variety of situations:
*
* * Escape hatch for broken dependencies not supporting SSR.
* * Improve the time-to-first paint on the client by only rendering above the fold.
* * Reduce the rendering time on the server.
* * Under too heavy server load, you can turn on service degradation.
*
* Documentation: [Base UI Unstable No Ssr](https://base-ui.com/react/components/unstable-no-ssr)
*/
function NoSsr(props) {
const {
children,
defer = false,
fallback = null
} = props;
const [mountedState, setMountedState] = React.useState(false);
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
if (!defer) {
setMountedState(true);
}
}, [defer]);
React.useEffect(() => {
if (defer) {
setMountedState(true);
}
}, [defer]);
// TODO casting won't be needed at one point https://github.com/DefinitelyTyped/DefinitelyTyped/pull/65135
// We could replace React.JSX.Element with React.ReactNode.
// But first, we need to bump min typescript support to version to 5.1 and enough people to adopt the above change.
return mountedState ? children : fallback;
}
;