我想在两个组件之间创建动画,其中第一个组件淡出并在将下一个组件添加到DOM并淡入之前从DOM中删除。否则,将新组件添加到DOM并在旧组件移除之前占用空间。你可以看到在这个小提琴问题:React组件之间的动画过渡
http://jsfiddle.net/phepyezx/4
// css snippet
.switch-enter {
opacity: 0.01;
}
.switch-enter.switch-enter-active {
opacity: 1.0;
}
.switch-leave {
opacity: 1.0;
}
.switch-leave.switch-leave-active {
opacity: 0;
}
// React snippet
<ReactCSSTransitionGroup transitionName="switch">
<div key={key} className={className}>{this.text()}</div>
</ReactCSSTransitionGroup>
一段不被接受的解决方案(对我来说)是过渡到新的组件之前隐藏的CSS原始的组件,如下所示:
http://jsfiddle.net/phepyezx/5
// Change to css
.switch-leave {
visibility: hidden;
height: 0px;
width: 0px;
opacity: 1.0;
}
是否有“延迟”从之前的原始安装一个新的成分反应被移除的路?我愿意为速度或其他图书馆来实现这一点。
由于
@JonnyBuchanan你的两种方法都很有用。现在已经过去了一段时间,您发现哪种方法最适合您? @RickJolly,你的方法在某些场景下效果最好吗?它是否扩展到ReactCSSTransitionGroup中的更大的列表(子)?我理解的方式是你的方法会产生一个额外的'render()'循环(可能每个项目被删除的额外周期?)。你有没有发现有优点或缺点? (也许是调试 - 也许它更清晰地说明了额外的render()是怎么回事?) –
另外,要动画的组件必须实现'componentWillUnmount',以及'handleTransitionEnd()'作为'道具'...你有没有发现这是对其他情况的痛苦? –