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;
}
4

2 回答 2

4

好吧,看起来他们已经解决了,只是我直到现在才发现它。

React-Router git repo 有一个示例列表,其中一个用于“动画”。这个演示展示了如何利用 ReactCSSTransitionGroup 通过克隆元素并分配一个键来为输入/输出“页面”设置动画。

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

于 2016-03-08T22:14:36.527 回答
2

我创建了一个可以正常安装/卸载组件的bin 。看看,让我知道它是否与您正在做的事情相似但仍然无法解决问题

于 2016-03-07T18:53:54.237 回答