感谢您查看我的问题。
react virtualized 的@bvaughn 创建者对这个问题的回答表明,您可以使用门户在虚拟化列表中创建一个下拉列表,该列表可以溢出其行而不会被剪裁。
这是一个沙箱,我尝试在卡内添加一个门户。而不是使用@bvaughn 的示例(他在其中混淆地定义和引用但没有呈现应该打开门户的按钮(我可能在这里遗漏了一些东西!?))我使用了来自tajo/react-portal的示例自述文件。我还尝试了材料 ui 门户和 ReactDOM 门户,结果相似。
如果门户内的元素没有类似的东西position: absolute
,top: 0
那么它根本不会出现。但是如果我们必须给出最高值,我们怎么知道要给出什么最高值,所以它是我们想要它相对于它打开的行/按钮的位置......此外,如果我们使用绝对定位,如何让它滚动时位置更新?听起来可行,但有相当多的样板。
在这里,您可以在沙箱中看到门户没有被相邻行剪裁,这是所需的。但它的位置与打开它的按钮无关:
这是 SimpleCard.js 沙箱中的相关代码
<CardContent>
<PortalWithState closeOnOutsideClick closeOnEsc>
{({ openPortal, closePortal, isOpen, portal }) => (
<React.Fragment>
<button onClick={openPortal}>
Open Portal
</button>
{portal(
<p style={{top: '0', position: 'absolute', zIndex: 1000, background: 'red', width: '100px', height: '400px'}}>
This is a portal
<button onClick={closePortal}>Close me!</button>
</p>
)}
</React.Fragment>
)}
</PortalWithState>
</CardContent>
我探索了将行传递到 Portalnode
中(我希望它可能正好匹配它的位置),但这使得在指定节点内的渲染违背了目的/没有解决裁剪问题。
非常感谢您提供的任何帮助、见解或经验!