我正在创建一个Logger
服务来跟踪我的应用程序中的事件。为了使Logger
服务通用,我使用 React 的 Portal 来捕获在我的应用程序中触发的事件。我的应用程序的基本思想是:
<LoggerPortal>
<App>
</LoggerPortal>
这对我的用例很有效,直到我iFrame
在我的应用程序中使用了。
考虑一个呈现 iFrame 的非常简单的组件:
const Frame = props => {
const refiFrame = useRef(null);
useEffect(() => {
console.log(refiFrame.current.contentDocument);
}, []);
return (
<>
<iframe id="i-framed-you" title="original-iframe-title" ref={refiFrame} />
</>
);
};
Frame
现在,当我在没有门户包裹的情况下在上面渲染这个组件时,iframe.contentDocument
日志符合预期。
ReactDOM.render(<Frame />,rootElement)
但是当我渲染Frame
包装在 Portal 中的组件时,iFrame.contentDocument
值为null。
ReactDOM.render(
<LoggerPortal>
<Frame />
</LoggerPortal>,
rootElement
);
这是一个代码框,其中有一个描述我的问题的应用程序。有人在使用门户网站和 iFrame 时遇到过这个问题吗?我在这里遗漏了一些明显的东西吗?