class AnimateItemComponent extends React.Component
{
static propTypes =
{
animate: React.PropTypes.bool
};
render()
{
let aniamte = this.props.aniamte;
let style = {};
let className = ["item-class"];
let time = parseInt(Math.random() * 2000); // Maximum of 2 seconds
if (aniamte)
{
// Consider support more prefixes
style.animationDelay = time + "ms";
}
if (this.props.active)
className.push("animate"); // Class the activate the animation
return React.createElement("div", {className, style}, "My text");
}
}
class AnimateComponent extends React.Component
{
constructor()
{
this.state = {};
// Initialize the value to keep the prop types boolean
this.state.aniamte = false;
// Our items to handle, can be easily replaced with the setState.
this.state.items = ["a", "b", "c", "d", "e"];
}
render()
{
let content = [];
let items = this.state.items;
let aniamte = this.state.aniamte;
content = items.map(item =>
{
return React.createElement(AnimateItemComponent, {animate});
});
return content;
}
startAnimation()
{
this.setState({aniamte: true});
}
stopAnimation()
{
this.setState({aniamte: false});
}
serverRequest()
{
// Activate animation:
this.startAnimation();
// Stop animation
this.stopAnimation();
}
}
出典
2016-09-05 21:03:25
Ido
ありがとうございます。しかし、それは私が2つの理由から必要としているものではありません。1.各render()呼び出しはそれらをアニメーション化します。アイテムがバックエンドから戻ったときに、それらをアニメーション化したい(したがって、 "アイテム"がいっぱいです)。 render()が再び呼び出された場合、私はそれらのアニメーションを望んでいませんが、ただレンダリングしました2.それぞれの*タイルをアニメーション化したいのですが、アニメーションはランダムに開始する必要があります。ユーザー(ランダムに割り当てられる2〜3クラスは十分以上のものです)。難しい点は最初のものです:) – Bertuz
あなたは 'レンダリング'が何度も何度も呼び出すことができることを知って非常に失望します。 Reduxを使用し、 'console.log'を' render'の中のどこかに置いた場合、DOMが完全に準備された瞬間に、コンソール上でメッセージを4〜5回見ることができます。このため、Idoは 'componentDidMount'でアニメーションを開始します。つまり、対応するDOMがレンダリングされてから1回だけです。 –
あなたのニーズに合わせて答えを更新しました: – Ido