描述bug
传递给 play
函数的 canvasElement
指向了 iframe ( <div id="root">
)中的 root
div元素。然而,如果你使用 createPortal
(例如带有模态框),这些元素将被添加到根目录之外。这可能导致一些困惑,因为在门户中出现的元素不能以典型的方式进行查询。
重现
如果需要,可以提供。
系统
Storybook 6.4.4. React
附加上下文
作为解决方法,你可以引用 canvasElement
的父元素。也许只需要记录这一点就足够了。
MyStory.play = async ({canvasElement}) => {
//@ts-ignore
const canvas = within(canvasElement.parentElement)
....
}
6条答案
按热度按时间zujrkrfu1#
我遇到了同样的问题。
感谢您的解决方法,但正如您在代码中展示的那样,由于parentElement被类型化为
HTMLElement | null
,TypeScript会引发错误,所以并不理想。但目前它可以正常工作。我不确定修复的方法是什么,也许可以添加另一个参数属性来封装portal?不确定是否可行。
krcsximq2#
对我来说,它不起作用,即使使用屏幕或之前提到的解决方法。
g2ieeal73#
我解决这个问题的方法是获取当前文档的body元素。Typescript对此表示满意。
rpppsulh4#
感谢@mattlong,你的解决方法有效!
qqrboqgw5#
解:$
$
答:他要坐第11列第1行的座位。
093gszye6#
实际上,你可以使用
canvasElement.parentElement
。只需在末尾添加感叹号即可。我更喜欢这种方法,谢谢你,它对我有效!