【发布时间】:2021-05-08 13:58:53
【问题描述】:
我正在使用react-new-window 在新窗口中加载一个小组件。在那里,使用html2canvas 将其导出为 png。我希望从新打开的窗口调用导出函数,以便导出其元素,而不是父窗口中的元素。
问题:导出函数takeScreenShot()总是从父窗口调用,html2canvas在查询新的子窗口时找不到元素而是父窗口。
/*Export is the parent, functional component, which creates a pop up menu so user can copy item to clipboard, or export to a file as a screenshot*/
const Export = (props) => {
/*redacted*/
const [showWindowPortal, toggleWindowPortal] = useState(false); /*toggles new window with specific item */
const takeScreenShot = () => {
let id = `#${card.tag}`;
html2canvas(document.querySelector(id), {}).then((canvas) => {
/*redacted*/
});
});
};
return(
/*redacted*/
{showWindowPortal && (
<NewWindow
onUnload={() => {
toggleWindowPortal(false); //turns off toggle on close
}}
onOpen={() => console.log('opened')} //this property's function is called in the parent
features={features}
>
<div id={card.tag}>
<Card/>
</div>
</NewWindow>
)}
我已尝试从以下地址致电takeScreenShot():
- 子窗口中按钮的
onClick属性 -
<NewWindow/>中的onOpen属性 - 来自带有
NewWindow或showWindowPortal作为参数的[useEffect]钩子(我知道这应该不起作用)
到目前为止,没有任何效果,函数内部的 document.querySelector 始终位于父函数内部。
有什么想法吗?谢谢!
【问题讨论】:
标签: reactjs react-portal