【问题标题】:React Router Transition Animation missing timeout反应路由器过渡动画缺少超时
【发布时间】:2016-12-13 12:46:30
【问题描述】:

我的代码和官方React-Router git repo中的例子很相似。

Here is a codepen that shows the problem.

问题出在这里: 不是等待transitionEnterTimeout 属性中指定的时间,而是立即呈现新元素。然后两个 css 动画(进入和离开)同时运行。之后,前一个元素被删除。

在更复杂的设置中,我在本地遇到了同样的问题,这就是为什么我制作了简单的代码笔来查看问题所在。

我正在使用所有框架的最新版本(react、react-router、react-addons-css-transition-group)

const App = ({children, location}) => {
    return (
        <ReactCSSTransitionGroup
            component="div"
            transitionName="app"
            transitionEnterTimeout={500}
            transitionLeaveTimeout={500}
        >
            {children && React.cloneElement(children, {
                key: location.pathname,
            })}
        </ReactCSSTransitionGroup>
    );

【问题讨论】:

    标签: reactjs react-router reactcsstransitiongroup


    【解决方案1】:

    transitionEnterTimeout 没有描述在开始转换之前要延迟多长时间。它的值表示从节点中删除 .&lt;name&gt;-enter 类之前要等待多长时间。

    如果您希望延迟进入过渡,则需要在 CSS 中为过渡添加延迟。

    transition: $type $time $mode $delay;
    

    您还需要将transitionEnterTimeout 延长延迟的长度。

    transitionEnterTimeout={1000}
    

    【讨论】:

    • 对不起,我还是不明白。不管 css 动画转换如何,React-Router 转换,也就是路由组件的删除和添加都是重叠的。即使我将transitionLeave 设置为false,当您快速单击路线时,您也可以看到它们瞬间重叠。如果没有转换(都设置为 false),它可以像路由器本身一样工作,非常好。我还需要做些什么来完成这项工作,还是 css-transition-group 不适合在路线上使用?
    • 在RR提供的示例中,页面容器是绝对定位的,因此它们存在于页面中的相同位置。
    • 你是对的,它确实改变了行为,所以这两个元素可以相互叠加,所以看起来它们会消失。但这并没有改变错误仍然存​​在,这两个元素的重叠时间很短,而不是像路由器通常那样被交换出去。此外,我认为如果我必须修复所有绝对定位问题的 css,那将无法达到目的。
    • &lt;ReactCSSTransitionGroup&gt; 不会立即删除不再存在的元素。如果您想更好地理解,我建议您阅读源代码(尤其是github.com/reactjs/react-transition-group/blob/master/src/…),但要点是&lt;ReactCSSTransitionGroup&gt; 呈现一个&lt;TransitionGroup&gt;,它维护一个正在进入和退出的子组件的state.children 对象.所有这些孩子都被渲染了。退出的孩子完成动画后,他们会将自己从 state.children 对象中移除。
    • 好的,谢谢您的详细解释。我想这种动画方式不适合用于路由器元素。你知道有什么其他的过渡脚本更适合这种事情吗?
    猜你喜欢
    • 2019-03-03
    • 2021-07-25
    • 2015-08-15
    • 2020-07-25
    • 2016-06-09
    • 2016-03-27
    • 2023-02-04
    • 2021-10-01
    • 2018-04-03
    相关资源
    最近更新 更多