使用Chakra UI的useDisclosure时出现构造函数调用错误求助
解决Uncaught TypeError: class constructors must be invoked with 'new'(关联useDisclosure)
错误栈虽然指向useDisclosure.ts的onOpen方法,但实际问题和Chakra UI的useDisclosure无关,根源出在emoji-mart组件的使用方式上。
问题原因
emoji-mart v5+版本将React专用组件拆分到了@emoji-mart/react独立包中,你当前导入的emoji-mart包中的Picker是原生JavaScript类组件,并非适配React的封装版本,直接在React函数组件中使用会触发构造函数调用错误。
修复步骤
- 卸载旧的emoji-mart包:
npm uninstall emoji-mart # 或使用yarn yarn remove emoji-mart
- 安装React适配版的emoji组件包:
npm install @emoji-mart/react @emoji-mart/data # 或使用yarn yarn add @emoji-mart/react @emoji-mart/data
- 修改代码中的导入语句:
将原导入代码:
import { Picker } from 'emoji-mart'; import data from '@emoji-mart/data';
替换为:
import Picker from '@emoji-mart/react'; import data from '@emoji-mart/data';
- 保留原有Picker组件的使用逻辑,
handleEmojiSelect函数无需修改。
额外检查项
如果修复后仍有问题,可验证以下内容:
- 确保React版本≥16.8(支持Hooks特性)
- 确认所有依赖包为最新稳定版,避免版本冲突
内容的提问来源于stack exchange,提问作者Andrel Daga
相关产品推荐
相关产品推荐

