我正在使用一个包含自定义Dialog
组件的组件库,该组件使用@headlessui/react中的Dialog
,问题是每当我尝试使用此组件时,都会收到以下错误:
警告:React创建元素:类型无效--应为字符串(对于内置组件)或类/函数(对于复合组件),但得到的是:您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。
./节点模块/@测试/用户界面组件/目录/ui-components.cjs.development.js/exports.TestDialog@http://localhost:3000/static/js/bundle.js:75318:13
这是组件如果有帮助的话
import { Dialog } from '@headlessui/react';
import React, { useState } from 'react';
export const TestDialog: React.FC = () => {
let [isOpen, setIsOpen] = useState(true);
return (
<Dialog open={isOpen} onClose={() => setIsOpen(false)}>
<p>
Are you sure you want to deactivate your account? All of your data will
be permanently removed. This action cannot be undone.
</p>
<button onClick={() => setIsOpen(false)}>Deactivate</button>
<button onClick={() => setIsOpen(false)}>Cancel</button>
</Dialog>
);
};
我试过改变tsconfig
文件,添加babel插件和多个东西,但似乎都不起作用。
这只发生在使用craco
的项目中,但在其他NextJS
项目中也有效。
任何帮助都很感激,谢谢
2条答案
按热度按时间j5fpnvbx1#
这通常发生在组件返回undefined时。可能对话框组件内的某个组件返回undefined。若要修复此问题,请检查所有
return
语句。必须至少在组件内返回null
。从
到
9vw9lbht2#
如果你看一下headless ui文档中的例子,你会发现它们把所有的对话框内容都 Package 在一个
<Dialog.Panel>
组件中。如果不这样做,你会发现你的组件不会呈现任何东西,我相信这是导致你的错误。
如果你改变你的组件到下面我认为它应该工作。