ReactCSSTransitionGroup只能用于在新组件中进行动画效果吗?

10

我已经成功使用ReactCSSTransitionGroup(我想),新加载的组件以其全部荣耀淡入。

问题在于,被替换的组件突然消失了,这对我来说是个问题,因为最终我希望我的组件在视口内进出过渡...

我似乎没有看到任何告诉离开的组件如何优雅消失的方法。

我是否遗漏了什么,或者ReactCSSTransitionGroup只能动画化正在进入的组件?

更新

以下是代码:

import React from "react";
import ReactDOM from "react-dom";
import { Router, Route, IndexRoute, hashHistory, Link } from "react-router";
import ReactCSSTransitionGroup from "react-addons-css-transition-group";


class PageOne extends React.Component {
  render() {
    return (
      <ReactCSSTransitionGroup transitionName="example" transitionAppear={true} transitionAppearTimeout={500} transitionEnterTimeout={500} transitionLeaveTimeout={500}>
        <div>
          HI FROM PAGE ONE<br />
          <br />
          <Link to="two">Take me to Page Two</Link>
        </div>
      </ReactCSSTransitionGroup>
    );
  }
}
class PageTwo extends React.Component {
  render() {
    return (
      <ReactCSSTransitionGroup transitionName="example" transitionAppear={true} transitionAppearTimeout={500} transitionEnterTimeout={500} transitionLeaveTimeout={500}>
        <div>
          HELLO FROM PAGE TWO<br />
          <br />
          <Link to="/">Go back to Page One</Link>
        </div>
      </ReactCSSTransitionGroup>
    );
  }
}


const app = document.getElementById('app');
ReactDOM.render(
  <Router history={hashHistory}>
    <Route path="/" component={PageOne}></Route>
    <Route path="two" component={PageTwo}></Route>
  </Router>,
app);

并且CSS的代码:

.example-enter {
  opacity: 0.01;
}
.example-enter.example-enter-active {
  opacity: 1;
  transition: opacity 500ms ease-in;
}
.example-leave {
  opacity: 1;
}
.example-leave.example-leave-active {
  opacity: 0.01;
  transition: opacity 300ms ease-in;
}

React转换的解释说明您可以在出现、进入和离开时进行转换。如果您需要进一步帮助,请分享一些代码。 - wintvelt
更新了帖子,只包含最基本的代码以展示我的目标。上述代码在组件挂载/卸载时不会淡入/淡出。 - Stefan
2个回答

4

好的,看起来他们已经解决了这个问题,而我直到现在才发现。

React-Router git存储库中有一个示例列表,在其中有一个名为“Animation”的示例。此演示说明了如何利用ReactCSSTransitionGroup通过克隆元素并分配关键字来动画显示“页面”进入/退出。

https://reacttraining.com/react-router/web/example/animated-transitions


2

这可能是我试图描述问题的过错。我实际上想要实现的是使用ReactCSSTransitionGroup在页面之间进行转换。 - Stefan
另一个问题可能是,ReactCSSTransitionGroup是否应该作为页面转换的首选? - Stefan
ReactCSSTransitionGroup最好的使用案例是在列表中添加/删除元素,因为我们可以跟踪在列表场景中进入或离开DOM的元素。参考: 1.ReactCSSTransitionGroup基于ReactTransitionGroup,是在React组件进入或离开DOM时执行CSS过渡和动画的简单方法。 因此,如果您将其应用于在DOM中转换进出的页面,则需要将转换放置在视图容器的父级上,在该父级中呈现视图。像您的示例中一样将其添加到链接上是行不通的。 - Aditya Singh
正如@AdityaSingh所指出的那样,ReactCSSTransitionGroup不涵盖页面更改时的动画(例如在react router中)。如果您想在导航路由上应用过渡效果,您可能需要查看此解决方案,该解决方案覆盖了<Location>组件以实现页面过渡效果。 - wintvelt
有趣,感谢大家的帮助。谢谢@winvelt,我之前已经发现了这个,但由于我已经在使用react-router,因为它似乎是更“被认可”的解决方案,所以我现在会专注于尝试它。 - Stefan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接