Modal对话框关闭后页面滚动条消失怎么办?
我在用React写一个Modal组件,弹出时body加了overflow:hidden防止背景滚动,但关闭Modal后页面的滚动条就没了,内容还向左偏移了一点,看起来特别别扭。
我试过在useEffect里加回overflow: auto,但有时候还是不生效,尤其是在快速打开关闭的时候。有没有靠谱的处理方式?
useEffect(() => {
if (isOpen) {
document.body.style.overflow = 'hidden';
} else {
document.body.style.overflow = 'auto';
}
}, [isOpen]);
更稳的做法是用class来控制,先记录原始overflow值,关闭时还原回去。试试这样改:
如果还有问题,可能是其他样式干扰,可以再加个padding-right补偿滚动条宽度:
这招在antd的Modal里也用到了,实测靠谱。快速开关的问题用cleanup函数就能解决,别忘了在effect里做清理。
这样即使快速开关也能正确恢复,因为React保证cleanup在下一个effect前执行完。