Material-UI v5 对话框退出淡入淡出动画不适用于 React Router

Posted

技术标签:

【中文标题】Material-UI v5 对话框退出淡入淡出动画不适用于 React Router【英文标题】:Material-UI v5 Dialog exit fade animation not working with React Router 【发布时间】:2021-10-17 04:45:32 【问题描述】:

我正在从他们的docs 编辑 React Router Modal Gallery 示例,以包含 Material-UI dialogs。问题是退出动画(淡出)没有运行,因为当您关闭模式时 URL 会发生变化,所以它就消失了。

有没有办法保留当前功能并添加令人愉快的淡出?

我需要的与this 非常相似,但是当您在该示例上刷新页面时,模态仍处于打开状态,我需要它在页面刷新时没有模态的情况下打开,就像在代码框和默认 React 中一样路由器示例。

注意:这个问题不是 Mui5 特有的,我只是碰巧在使用它。

【问题讨论】:

【参考方案1】:

不确定这是否是您想要的,也不确定这是否是最好的方法。

您可以通过onExited() 方法手动操作过渡并在动画完成时做任何您想做的事情。

const Transition = React.forwardRef((props, ref) => 
  const history = useHistory();
  return (
    // use Slide to display a clearer transition,
    // can replace it with Fade
    <Slide
      ref=ref
      ...props
      // do something after animation exited
      onExited=() => 
        history.goBack();
      
    />
  );
);

function Modal(props) 
  // open state is used for transition trigger
  const [open, setOpen] = React.useState(props.open);

  const  id  = useParams();
  const image = IMAGES[parseInt(id, 10)];

  if (!image) return null;

  function handleClose() 
    // setting false to trigger exit animation
    setOpen(false);
  

  return (
    <Dialog
      open=open
      onClose=handleClose
      TransitionComponent=Transition
      scroll="body"
    >
      <Content />
    </Dialog>
  );

这里是codesandbox for demo。

【讨论】:

这正是我想要的,谢谢!对不起,如果我不清楚。这个问题的标题可能是“如何在 Material-UI v5 中正确使用 TransitionComponent”?‍♂️

以上是关于Material-UI v5 对话框退出淡入淡出动画不适用于 React Router的主要内容,如果未能解决你的问题,请参考以下文章

持久抽屉不适用于 material-ui v5

如何在 Material-UI V5 (@mui/lab) datepicker 组件上设置一个空标签?

Css className 比 material-ui v5 中的 css 类具有较低的特异性

如何查看弹出动画的进度?

(Swift)淡入淡出标签[重复]

如何使用 cocoalibspotify 进行音频交叉淡入淡出?