我有一个肚脐,使用HeadlessUI的Popover
在手机上的汉堡包菜单。默认情况下,当您单击不在其中的元素/焦点时,此菜单将关闭。
现在,我正在尝试添加一个模式(HeadlessUI,Dialog
),在单击弹出菜单中的一个按钮时,我希望打开该模式。该模型在ModalButton
组件定义(<><button><dialog></>
)中使用。这是为了分离关注点(与模型相关的所有内容都在ModalButton
中)。
问题是:当我在导航栏的弹出菜单并点击按钮打开对话框。浏览器关注这个新对话框,因此弹出窗口失去焦点,使其关闭。由于关闭,按钮(因此对话框兄弟)不再呈现,因此对话框立即消失。
作为参考,这是react树的伪代码:
<navbar>
<popover>
<> {/* "ModalButton" containing both the button and the dialog */}
<button /> {/* Button that opens the dialog */}
<dialog /> {/* This uses a portal internally (with HeadlessUI) */}
</>
</popover>
</navbar>
我可以想出几种方法来解决这个问题,但这两种方法都不是很好:
Popover
在专注于对话框时关闭?(但仍然允许它在聚焦任何不是对话框的内容时关闭)我很想听听关于解决这个问题的任何想法。
发布于 2022-01-25 21:16:47
你应该把对话框放在树的更高的位置。通常情况下,这些对话框可以在页面级别,甚至应用程序级别,取决于这些对话框的全局性。
然后,您可以使用您最喜欢的全局状态管理器或useContext
钩子告诉这些对话框以编程方式从应用程序的任何位置打开。
在这种情况下,自动关闭popover不应该是一个问题了。
https://stackoverflow.com/questions/70537772
复制相似问题