Dynamically Render Client Side with Next.js
Next.js has a handy feature for rendering a child component client side, instead of on the server.
Consider the following example, where you have a component in src/components/Analytics.js
with a default
export.
import dynamic from "next/dynamic";
const DynamicAnalytics = dynamic(() => import("../components/Analytics"));
function Header(props) {
return (
<>
<DynamicAnalytics />
<OtherServerRenderedStuff {...props} />
</>
)
}
Named Exports
You can also use this dynamic importing feature with named exports. Consider the next example:
// src/components/Analytics.js
export function Analytics() {
return (
// ....
)
}
import dynamic from "next/dynamic";
const DynamicAnalytics = dynamic(
() => import("../components/Analytics").then(mod => mod.Analytics)
);
function Header(props) {
return (
<>
<DynamicAnalytics />
<OtherServerRenderedStuff {...props} />
</>
)
}
There are some gotcha's when using dynamic
, so make sure to check out the docs and get familiar with the API.
https://nextjs.org/docs/advanced-features/dynamic-import