使用 ReactDOM createPortal 为 react-transition-group 设置动画

Posted

技术标签:

【中文标题】使用 ReactDOM createPortal 为 react-transition-group 设置动画【英文标题】:Animating react-transition-group with ReactDOM createPortal 【发布时间】:2019-07-07 10:33:26 【问题描述】:

我一直在试图弄清楚如何完成我认为非常简单的事情(我知道......)

目标是一个非常最小可重用的模态组件,我可以使用触发按钮或w/e在某种HOC中制作动画。

我正在使用 createPortal 创建它,目标是在所述门户的进入/退出时添加一些简单的动画。

我已经使用 GSAP 让它工作,但理想情况下我希望它与 SC 一起使用,这样我就不必引入另一个动画库。

在我的一生中,我无法让它与 SC 一起工作,如果有人能指出我正确的方向,我会很高兴。

我在这里制作了一个沙箱:https://codesandbox.io/s/r44w9m4o5p 使用 GSAP 运行动画,虽然有点 hacky,但对于我的目标来说它是正确的方向。

另外,使用 react-transition-group 比 https://github.com/react-tools/react-move 之类的东西有好处吗?

【问题讨论】:

【参考方案1】:

您可以使用CSSTransition 组件代替TransitionCSSTransition 将使用给定的动画时间切换适当的类名:.*-enter.*-enter-active 用于过渡,.*-exit.*-exit-active 用于过渡。因此,您可以使用 styled-components 的 CSS3 属性定义所有过渡。

看看我的fork:https://codesandbox.io/s/zz95v5103

我刚刚用过渡样式扩展了您的Modal。请注意扩展样式 requires className property for the component to be extended,因此我已将该属性添加到您的 Modal 组件中。

【讨论】:

是否有理由使用styled-components 而不仅仅是使用 CSS/sass(除了能够注入持续时间?)? @Simon,您可以使用任何样式方法。没有使用样式组件的具体原因。

以上是关于使用 ReactDOM createPortal 为 react-transition-group 设置动画的主要内容,如果未能解决你的问题,请参考以下文章

ReactDOM.createPortal

实现 ReactDOM.createPortal 时的问题(react 16 功能)

使用 ReactDOM createPortal 为 react-transition-group 设置动画

ReactDOM.createPortal() 在 next.js-typescript 中创建额外的空白 div

React.createPortal 及 Modal 的新实现方式

使用 Storyshot 渲染 React Portal 时出错