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

Next.js集成ChakraUI构建失败:useMemo引用未定义问题

Next.js 与 ChakraUI 兼容问题:useMemo 读取 null 报错

为优化SEO、包体积及页面性能,我正将基于Create React App的SPA迁移至Next.js,但执行next build时所有页面均报错:TypeError: Cannot read properties of null (reading 'useMemo'),错误源自ChakraUI的ThemeProvider,疑似无法正常访问React的useMemo。

相关代码

_app.js

import Layout from '../components/layout.js';
import '../styles/fonts.css';
import '../styles/swatches.css';
import '../styles/pdf.css';
import { ChakraProvider } from '@chakra-ui/react';
import theme from '../styles/theme.js';

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

_document.js

import { Html, Head, Main, NextScript } from 'next/document'
import { ColorModeScript } from '@chakra-ui/react'

export default function Document() {
  return (
    <Html lang="en" style="scroll-behavior:smooth">
      <Head>
      <meta charset="utf-8" />
        <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta name="theme-color" content="#000000" />
        <meta
        name="dibiagg.io"
        content="Anthony Di Biaggio's personal website"
        />
        <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
        <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
        <script src="https://cdn.socket.io/4.5.0/socket.io.min.js" integrity="sha384-7EyYLQZgWBi67fBtVxw60/OWl1kjsfrPFcaU0pp0nAh+i8FD068QogUvg85Ewy1k" crossorigin="anonymous"></script>
        <title>dibiagg.io</title>
      </Head>
      <body>
        <ColorModeScript />
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

layout.js

import Nav from './Nav.js'
import ContactFooter from './ContactFooter.js'
import Banner from './Banner.js'
import { FaGithub } from 'react-icons/fa'

export default function Layout({ children }) {
    return (
      <>
        <Banner header="DIBIAGG.IO is open source!" action="Check it out on Github." buttonText="Go" buttonIcon={<FaGithub />} onClick={() => {window.open("https://github.com/anthonydibi/dibiagg.io")}}/>
        <Nav />
        <main>{children}</main>
        <ContactFooter/>
      </>
    )
}

已尝试的操作

  • 移除ChakraUI主题配置,出现useContext未定义错误
  • 移除ChakraProvider后,使用ChakraUI样式的组件出现类似React钩子未定义的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:05:34