react-activation icon indicating copy to clipboard operation
react-activation copied to clipboard

使用缓存后导致antd Modal页面切换无法关闭

Open zhongweiming opened this issue 2 years ago • 8 comments

未使用缓存的时候,切换路由组件会销毁,里面的Modal也会跟着销毁。 使用缓存,目前方案是在useUnactivate这个钩子中设置控制Modal显隐的state为false,但是发现并不生效,Modal并未销毁,state未更新。是离开后就没法更新组件状态了吗?大佬有啥好的解决办法吗,手动控制路由跳转前销毁Modal不太行

useUnactivate(() => {
    setShowDialog(false);
    console.log('路由缓存隐藏啦', currentRoute);
    console.log(getCachingNodes());
});
useEffect(() => {
      console.log('showDialog变化了', showDialog);
  }, [showDialog]);
{showDialog && (
    <Modal
        title='选择员工/用户'
        afterClose={() => console.log('关闭啦')}
        visible={staffModalVsb3}
        footer={null}
        width={1060}
        onCancel={() => setStaffModalVsb3(false)}
    >
    </Modal>
)}

zhongweiming avatar Jan 30 '23 11:01 zhongweiming

看看是不是和 #240 类似?

CJY0208 avatar Feb 02 '23 01:02 CJY0208

我遇到过,目前的解决方案是把modal挂载在dom上而非全局上面

Bravo123 avatar Feb 14 '23 02:02 Bravo123

看看是不是和 #240 类似?

我这个弹窗是一定要挂在body下面的,不然会被遮住,所以不太一样。像这种气泡我都像你说的那样处理了,但是目前的弹窗没法那样处理,我在想这个缓存能不能里面部分内容不缓存呢?像这样 image

zhongweiming avatar Feb 17 '23 09:02 zhongweiming

不知道when是不是这个意思

zhongweiming avatar Feb 17 '23 09:02 zhongweiming

不知道when是不是这个意思

when 属性不能实现你说的这个功能,目前 KeepAlive 还没有这类功能

按理来说在 useUnactivate 里调用 setVisible(false) 应该是能生效的,不太了解你的场景为什么不行,可以做一个复现 demo 吗?我看看是什么原因

CJY0208 avatar Feb 17 '23 11:02 CJY0208

尝试autoFreeze:false,我反正是解决了

GrinZero avatar Apr 12 '23 10:04 GrinZero

尝试autoFreeze:false,我反正是解决了

能提供相关代码吗

MiyamuraRyota avatar Apr 13 '23 03:04 MiyamuraRyota

挂在body上的弹出层有这个问题,蹲一个解决方案

kylvia avatar Jul 07 '23 08:07 kylvia