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

Next.js项目中使用自定义React UI Kit Hooks报错求助

解决自定义React UI Kit在Next.js 13中集成Hooks时的useState空指针错误

错误本质

这个报错的核心原因是自定义UI Kit打包时将React/ReactDOM一同打包进了产物,导致Next.js项目中同时存在两个独立的React实例,Hooks API无法关联到正确的React上下文,最终触发Cannot read properties of null错误。

分步解决方案

1. 配置Vite打包规则,排除React依赖

修改UI Kit项目中的vite.config.js,将React和ReactDOM标记为外部依赖,避免打包工具把它们打入最终产物:

// vite.config.js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react()],
  build: {
    lib: {
      entry: 'src/index.js', // 替换为你的UI Kit入口文件路径
      name: 'MyCustomUIKit',
      fileName: (format) => `my-custom-ui-kit.${format}.js`
    },
    rollupOptions: {
      // 外部化React和ReactDOM,让宿主项目提供依赖
      external: ['react', 'react-dom'],
      output: {
        // 为UMD格式提供全局变量映射(可选)
        globals: {
          react: 'React',
          'react-dom': 'ReactDOM'
        }
      }
    }
  }
})

2. 声明Peer依赖,规范版本兼容

在UI Kit的package.json中添加peerDependencies,明确要求使用方提供兼容版本的React:

{
  "name": "my-custom-ui-kit",
  "version": "1.0.0",
  "peerDependencies": {
    "react": "^17.0.0 || ^18.0.0",
    "react-dom": "^17.0.0 || ^18.0.0"
  },
  "devDependencies": {
    "react": "^18.0.0",
    "react-dom": "^18.0.0"
  }
}

3. Next.js项目中正常使用UI Kit

在Next.js项目安装UI Kit后,直接导入组件即可(Next.js会自动处理Peer依赖的版本匹配):

// app/page.js (Next.js 13 App Router示例)
import { Card } from 'my-custom-ui-kit'

export default function Home() {
  return (
    <div className="p-8">
      <Card title="测试卡片">
        <p>自定义UI Kit组件已正常集成Hooks</p>
      </Card>
    </div>
  )
}

额外排查项

  • 执行npm ls react检查Next.js项目中是否存在重复的React实例,确保只有顶层的一个React依赖
  • 若UI Kit使用了其他第三方库(如styled-components),同样需要将其设为Peer依赖或外部化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:22:26