Server Components
Learn how to use Chakra UI with React Server Components.
React Server Components is a new feature in React that allows you to build components that render on the server and return UI to the client without hydration.
Client components are still server-rendered but hydrated on the client. Learn more about Server component patterns
Chakra UI components are client components because they rely on useState,
useRef and useState which are not available in server components.
Usage
Here's an example of how to use Chakra UI components with React Server Components in Next.js
import { Heading } from "@chakra-ui/react"
import fs from "node:fs"
export default async function Page() {
const content = fs.readFileSync("path/to/file.md", "utf-8")
return <Heading as="h1">{content}</Heading>
}Chakra Factory
When using the chakra() factory function, use the use client directive and
move the component to a dedicated file.
"use client"
import { chakra } from "@chakra-ui/react"
export const BlogPost = chakra("div", {
base: {
color: "red",
},
variants: {
primary: {
true: { color: "blue" },
false: { color: "green" },
},
},
})Then import the component in your page server component
import { BlogPost } from "./blog-post"
export default async function Page() {
const content = fs.readFileSync("path/to/file.md", "utf-8")
return <BlogPost>{content}</BlogPost>
}Hooks
When importing hooks from Chakra UI, use the use client directive
"use client"
import { useBreakpointValue } from "@chakra-ui/react"
export function MyComponent() {
const value = useBreakpointValue({ base: "mobile", md: "desktop" })
return <div>{value}</div>
}Render Props
When using render props, use the use client directive
"use client"
import { ProgressContext } from "@chakra-ui/react"
export function MyComponent() {
return <ProgressContext>{({ value }) => <div>{value}</div>}</ProgressContext>
}