You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS导入Chakra-UI后触发TypeError报错求助

解决NextJS + Chakra-UI导入ChakraProvider后的Server Error问题

问题场景

仅在NextJS的_app.js中导入@chakra-ui/react的ChakraProvider组件(未在代码中使用),页面就触发Server Error,报错信息如下:

Server Error
TypeError: Cannot read properties of undefined (reading 'toLowerCase')

This error happened while generating the page. Any console logs will be displayed in the terminal window.
Call Stack
userAgentContains
file:///Users/dhineshbabumuthuraj/Documents/Dhineshbabu/learning/JavaScript/nextjs-apps/sample-nextjs-app1/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs (1470:25)
<unknown>
file:///Users/dhineshbabumuthuraj/Documents/Dhineshbabu/learning/JavaScript/nextjs-apps/sample-nextjs-app1/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs (1476:20)
ModuleJob.run
node:internal/modules/esm/module_job (218:25)
async ModuleLoader.import
node:internal/modules/esm/loader (329:24)
async importModuleDynamicallyWrapper
node:internal/vm/module (430:15)

当前_app.js代码:

import Layout from '../components/layout/layout';
import '../styles/globals.css';
import { ChakraProvider } from '@chakra-ui/react';

export default function App({ Component, pageProps }) {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
}

解决方案

1. 正确使用ChakraProvider包裹根组件

ChakraProvider是Chakra-UI的核心根组件,必须用来包裹整个应用才能正常工作。仅导入但不使用会导致其依赖的framer-motion在服务端渲染时找不到所需的环境变量(比如userAgent),从而触发报错。修改后的_app.js代码:

import Layout from '../components/layout/layout';
import '../styles/globals.css';
import { ChakraProvider } from '@chakra-ui/react';

export default function App({ Component, pageProps }) {
  return (
    <ChakraProvider>
      <Layout>
        <Component {...pageProps} />
      </Layout>
    </ChakraProvider>
  );
}

2. 修复framer-motion版本兼容性问题

Chakra-UI对framer-motion的版本有严格要求,版本不匹配会引发服务端渲染异常。执行以下命令重新安装适配的版本:

# 卸载现有framer-motion
npm uninstall framer-motion
# 安装Chakra-UI推荐的稳定版本(以v6.5.1为例,可根据Chakra官方文档调整)
npm install framer-motion@^6.5.1

3. 临时禁用服务端渲染(调试用)

如果只是临时调试,可以给ChakraProvider添加ssr={false}属性,强制组件在客户端渲染,避免服务端环境的限制:

<ChakraProvider ssr={false}>
  <Layout>
    <Component {...pageProps} />
  </Layout>
</ChakraProvider>

内容的提问来源于stack exchange,提问作者Dhinesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 06:35:16