在 Next.js(应用)中使用 Chakra UI
Chakra UI 在 Next.js 应用目录下的安装指南
模板
¥Templates
使用以下模板之一快速入门。模板已正确配置以使用 Chakra UI。
¥Use one of the following templates to get started quickly. The templates are configured correctly to use Chakra UI.
安装
¥Installation
所需的最低 Node 版本为 Node.20.x
添加代码片段
¥Add snippets
代码片段是预先构建的组件,你可以使用它们更快地构建 UI。使用 @chakra-ui/cli
属性,你可以将代码片段添加到你的项目中。
¥Snippets are pre-built components that you can use to build your UI faster.
Using the @chakra-ui/cli
you can add snippets to your project.
npx @chakra-ui/cli snippet add
更新 tsconfig
¥Update tsconfig
如果你使用的是 TypeScript,则需要更新 tsconfig 文件中的 compilerOptions
,使其包含以下选项:
¥If you're using TypeScript, you need to update the compilerOptions
in the
tsconfig file to include the following options:
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "Bundler",
"skipLibCheck": true,
"paths": {
"@/*": ["./src/*"]
}
}
}
如果你使用 JavaScript,请创建一个 jsconfig.json
文件并将上述代码添加到该文件中。
设置提供者
¥Setup provider
使用应用根目录下 components/ui/provider
组件中生成的 Provider
组件封装你的应用。
¥Wrap your application with the Provider
component generated in the
components/ui/provider
component at the root of your application.
此提供程序包含以下内容:
¥This provider composes the following:
-
ChakraProvider
来自@chakra-ui/react
,用于样式系统 -
ThemeProvider
来自next-themes
,用于颜色模式
app/layout.tsx
import { Provider } from "@/components/ui/provider"
export default function RootLayout(props: { children: React.ReactNode }) {
const { children } = props
return (
<html suppressHydrationWarning>
<body>
<Provider>{children}</Provider>
</body>
</html>
)
}
需要将 suppressHydrationWarning
属性添加到 html
元素以避免出现有关 next-themes
库的警告。
优化包
¥Optimize Bundle
我们建议使用 Next.js 中的 experimental.optimizePackageImports
功能,通过仅加载实际使用的模块来优化包大小。
¥We recommend using the experimental.optimizePackageImports
feature in Next.js
to optimize your bundle size by loading only the modules that you are actually
using.
next.config.mjs
export default {
experimental: {
optimizePackageImports: ["@chakra-ui/react"],
},
}
这也有助于解决以下警告:
¥This also helps to resolve warnings like:
[webpack.cache.PackFileCacheStrategy] Serializing big strings (xxxkiB)
水合错误
¥Hydration errors
如果你看到如下错误:Hydration 失败,因为初始服务器渲染的 HTML 与客户端不匹配,错误类似于:
¥If you see an error like this: Hydration failed because the initial server rendered HTML did not match the client, and the error looks similar to:
+<div className="chakra-xxx">
-<style data-emotion="css-global xxx" data-s="">
这是由 Next.js 在 --turbo
模式下如何整合 Emotion CSS 造成的。请从 package.json
文件中的 dev
脚本中删除 --turbo
标志。
¥This is caused by how Next.js hydrates Emotion CSS in --turbo
mode. Please
remove the --turbo
flag from your dev
script in your package.json
file.
- "dev": "next dev --turbo"
+ "dev": "next dev"
当 Next.js
团队修复此问题后,我们将更新本指南。
¥When this is fixed by the Next.js
team, we'll update this guide.
尽情享受吧!
¥Enjoy!
借助 Chakra UI 的代码片段和原始组件的强大功能,你可以更快地构建 UI。
¥With the power of the snippets and the primitive components from Chakra UI, you can build your UI faster.
import { Button, HStack } from "@chakra-ui/react"
const Demo = () => {
return (
<HStack>
<Button>Click me</Button>
<Button>Click me</Button>
</HStack>
)
}