首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React中Popover中的对话框

React中Popover中的对话框
EN

Stack Overflow用户
提问于 2021-12-30 23:47:46
回答 1查看 1.6K关注 0票数 3

我有一个肚脐,使用HeadlessUI的Popover在手机上的汉堡包菜单。默认情况下,当您单击不在其中的元素/焦点时,此菜单将关闭。

现在,我正在尝试添加一个模式(HeadlessUI,Dialog),在单击弹出菜单中的一个按钮时,我希望打开该模式。该模型在ModalButton组件定义(<><button><dialog></>)中使用。这是为了分离关注点(与模型相关的所有内容都在ModalButton中)。

问题是:当我在导航栏的弹出菜单并点击按钮打开对话框。浏览器关注这个新对话框,因此弹出窗口失去焦点,使其关闭。由于关闭,按钮(因此对话框兄弟)不再呈现,因此对话框立即消失。

作为参考,这是react树的伪代码:

代码语言:javascript
运行
复制
<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>

我可以想出几种方法来解决这个问题,但这两种方法都不是很好:

  1. 在树中将模式拉得更高,在popover/汉堡包菜单之外,但仍然在肚脐内。但这打破了关注点的分离,因为导航栏现在不得不担心模型的开放状态。
  2. 将该模型放在树顶的某个位置,并使用某种全局状态(需要状态管理库)来处理该模型的打开。
  3. 也许有办法防止Popover在专注于对话框时关闭?(但仍然允许它在聚焦任何不是对话框的内容时关闭)

我很想听听关于解决这个问题的任何想法。

EN

Stack Overflow用户

回答已采纳

发布于 2022-01-25 21:16:47

你应该把对话框放在树的更高的位置。通常情况下,这些对话框可以在页面级别,甚至应用程序级别,取决于这些对话框的全局性。

然后,您可以使用您最喜欢的全局状态管理器或useContext钩子告诉这些对话框以编程方式从应用程序的任何位置打开。

在这种情况下,自动关闭popover不应该是一个问题了。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70537772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档