Server-side rendering
The getSandpackCssText function, which is available in the main package, is responsible for getting the Sandpack CSS string and server-side render it. Furthermore, Sandpack uses stitches/core under the hood to generate and dedupe theme variation, ensuring a consistent and lightweight CSS output.
import { getSandpackCssText } from "@codesandbox/sandpack-react"; const cssTextOutput = getSandpackCssText();
How to use it
Here's some examples of how to use in some popular React frameworks.
💡
For a better hydration strategy, we highly recommend adding an id="sandpack" to your style tag.
Next.js (app dir)
// components/sandpack-styles.tsx "use client"; import { getSandpackCssText } from "@codesandbox/sandpack-react"; import { useServerInsertedHTML } from "next/navigation"; /** * Ensures CSSinJS styles are loaded server side. */ export const SandPackCSS = () => { useServerInsertedHTML(() => { return ( <style dangerouslySetInnerHTML={{ __html: getSandpackCssText() }} id="sandpack" /> ); }); return null; };
// app/layout.tsx import { SandPackCSS } from "@/components/sandpack-styles"; export const metadata = { title: "Create Next App", description: "Generated by create next app", }; export default function RootLayout({ children, }: { children: React.ReactNode, }) { return ( <html lang="en"> <head> <SandPackCSS /> </head> <body>{children}</body> </html> ); }
import { Sandpack } from "@codesandbox/sandpack-react"; export default function Home() { return ( <div> <Sandpack theme="dark" /> </div> ); }
Next.js
// pages/_document.tsx import { getSandpackCssText } from "@codesandbox/sandpack-react"; import { Html, Head, Main, NextScript } from "next/document"; export default function Document() { return ( <Html> <Head> <style dangerouslySetInnerHTML={{ __html: getSandpackCssText() }} id="sandpack" key="sandpack-css" /> </Head> <body> <Main /> <NextScript /> </body> </Html> ); }
Gatsby
// gatsby-ssr.js import * as React from "react"; import { getSandpackCssText } from "@codesandbox/sandpack-react"; export const onRenderBody = ({ setHeadComponents }) => { setHeadComponents([ <style id="sandpack" key="sandpack-css" dangerouslySetInnerHTML={{ __html: getSandpackCssText(), }} />, ]); };
Examples
Still not clear, take a look at these examples.