【发布时间】:2023-02-06 18:39:25
【问题描述】:
我正在尝试使用 createProtal 在 React 应用程序中呈现动态生成的 React 组件。 当我从一个类中调用 createProtal 时,该组件未呈现。
Handler.ts包含业务逻辑的类
export class Handler {
private element: HTMLElement | null;
constructor(selector: string) {
this.element = document.getElementById(selector);
}
attachedEvent() {
this.element?.addEventListener("mouseenter", () => {
let cancel = setTimeout(() => {
if (this.element != null)
this.attachUi(this.element)
}, 1000)
this.element?.addEventListener('mouseleave', () => {
clearTimeout(cancel)
})
})
}
attachUi(domNode: HTMLElement) {
createPortal(createElement(
'h1',
{className: 'greeting'},
'Hello'
), domNode);
}
}
Main.tsx使用Handler.ts的react组件
const handler = new Handler("test_comp");
export default function Main() {
useEffect(() => {
// @ts-ignore
handler.useAddEventListeners();
});
return (
<>
<div id="test_comp">
<p>Detect Mouse</p>
</div>
</>
)
}
但是,当我将 attachUi 函数替换为下面的函数时,它就起作用了
attachUi(domNode: HTMLElement) {
const root = createRoot(domNode);
root.render(createElement(
'h1',
{className: 'greeting'},
'Hello'
));
}
我错过了什么?
【问题讨论】: