当前位置: 首页 > news >正文

解决 shadui组件库Popover 点击后会消失

react用了shadui组件库

        <Popover><PopoverTrigger><div className="text-operation-item" onClick={props.callback}><img src={props.imgSrc} width={20} height={20} /></div></PopoverTrigger><PopoverContent className="text-operation-bar">{props?.childComponent}</PopoverContent></Popover>

原因

shadcn/ui 的 Popover 底层是基于 @radix-ui/react-popover,默认行为是:

PopoverContent 里的任何点击事件,如果冒泡到 document,就会触发 Popover 的自动关闭。

📌 为什么点 childComponent 会让 Popover 关闭?
因为 @radix-ui/react-popover 会监听 onPointerDownOutside / onInteractOutside 事件,判断如果点击不是在 PopoverTrigger 或 PopoverContent 里,就关闭 Popover。
如果你的 childComponent 内部点击事件没有 stopPropagation,或者它的 focusable 元素 blur 了,也会触发关闭

解决办法:

方法 1:
给 childComponent 里的元素加 onClick={(e) => e.stopPropagation()}

<input onClick={(e) => e.stopPropagation()} />

如果 childComponent 是个自定义组件,也要确保它内部点击事件 stop 了冒泡。

方法 2:
利用 Popover 的 onOpenChange 和 open 手动控制开关状态
如果希望 Popover 点里面的内容不消失,推荐受控写法:

const [open, setOpen] = useState(false);<Popover open={open} onOpenChange={setOpen}><PopoverTrigger>...</PopoverTrigger><PopoverContent><input onClick={(e) => e.stopPropagation()} /></PopoverContent>
</Popover>

这样你能完全控制 Popover 的开关逻辑。

相关文章:

  • 【蓝桥杯省赛真题58】Scratch画台扇 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • 人工智能与机器学习:Python从零实现K-Means 算法
  • frp内网穿透的基础使用
  • 疫苗接种体系进入“全生命周期”时代:公共卫生治理再提速
  • Lustre/Scade 语言时序算子与形式化验证的联系
  • 多元函数微分之传统方法和全微分法
  • 电子监管码预检剔除装置提示盒尺寸过短
  • php 需要学会哪些技术栈,掌握哪些框架
  • 架构风格对比
  • new的使用
  • 泰山派常用命令
  • ICH CTD中ISS的关键内容与作用
  • params query传参差异解析及openinstall跨平台应用
  • 【深度学习】评估模型复杂度:GFLOPs与Params详解
  • 光流法:从传统方法到深度学习方法
  • python上测试neo4j库
  • python练习:求两数相加之和
  • Java并发探索--上篇
  • 智能座舱架构中芯片算力评估
  • 2025系统架构师---管道/过滤器架构风格
  • 外交部亚洲司司长刘劲松向菲方严肃交涉
  • 央行召开落实金融“五篇大文章”总体统计制度动员部署会议
  • 消费维权周报|上周违规经营类投诉较多,涉诱导加盟等
  • 解放日报头版头条:“五个中心”蹄疾步稳谱新篇
  • 银川市市长信箱被指已读乱回,官方回应
  • 大学2025丨专访北邮校长徐坤:工科教育要真正回归工程本质