How to enable WebSpatial in SSR-enabled projects
In a React project with SSR enabled, there is one extra step when integrating WebSpatial SDK: add the SSRProvider from the SDK.
Why this wrapper exists
SSRProvider gives the SDK the extra context it needs to bridge server rendering and client hydration correctly.
Generic React
client-entry.js
import { hydrateRoot } from "react-dom/client";
import { SSRProvider } from "@webspatial/react-sdk";
hydrateRoot(
document.getElementById("root"),
<SSRProvider>
<App />
</SSRProvider>,
);
Hydrogen
entry.client.jsx
import { HydratedRouter } from "react-router/dom";
import { startTransition, StrictMode } from "react";
import { hydrateRoot } from "react-dom/client";
import { NonceProvider } from "@shopify/hydrogen";
import { SSRProvider } from "@webspatial/react-sdk";
if (!window.location.origin.includes("webcache.googleusercontent.com")) {
startTransition(() => {
const existingNonce = document.querySelector("script[nonce]")?.nonce;
hydrateRoot(
document,
<StrictMode>
<NonceProvider value={existingNonce}>
<SSRProvider>
<HydratedRouter />
</SSRProvider>
</NonceProvider>
</StrictMode>,
);
});
}