MUI Popper组件无视指定位置,始终显示在页面左上角问题
MUI Popper 显示在左上角的修复方案
问题排查与修复点:
锚点元素命名不一致
你的Popper组件里anchorEl绑定的是newanchorEl,但点击逻辑里更新的是setNewAnchorEl,推测状态变量实际定义为驼峰式的newAnchorEl。大小写不匹配会让Popper找不到有效锚点,只能默认定位到左上角。
修复:把Popper中的anchorEl={newanchorEl}改成anchorEl={newAnchorEl},和状态变量名保持一致。open状态更新逻辑依赖异步旧值
点击处理函数里,setOpen的判断用了当前的placement状态,但setPlacement是异步更新的,此时拿到的还是旧值,容易导致open状态切换异常,影响Popper定位。
修复:直接用传入的newPlacement做判断,同时别硬写"right-start"覆盖参数值:const onClickHandler = (newPlacement: PopperPlacementType | undefined) => (event: React.MouseEvent<HTMLButtonElement>) => { setNewAnchorEl(event.currentTarget); setOpen((prev) => newPlacement !== placement || !prev); setPlacement(newPlacement); };检查状态初始化
确保状态初始值正确:const [newAnchorEl, setNewAnchorEl] = useState<HTMLButtonElement | null>(null); const [open, setOpen] = useState(false); const [placement, setPlacement] = useState<PopperPlacementType>("right-start");如果
newAnchorEl初始不是null,或者open初始为true,都可能导致Popper在无有效锚点的情况下加载。调整Popper的modifiers配置
当前preventOverflow里的escapeWithReference: true可能让Popper在某些场景下脱离锚点,尝试关闭这个配置:modifiers={{ preventOverflow: { enabled: true, escapeWithReference: false, boundariesElement: "viewport", }, }}
内容的提问来源于stack exchange,提问作者Sujit
相关产品推荐
相关产品推荐

