次のコンポーネントをDOMに追加してフェードインする前に、最初のコンポーネントがフェードアウトしてDOMから削除される2つのコンポーネントの間でアニメートしたいと思う。 DOMは古いコンポーネントが削除される前に領域を占有します。コンポーネント間でアニメーションの反応を反応させよう
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あなたはそれが他の状況の痛みであることを発見しましたか? –