Learning ReactJS私は単純なカウントダウンアプリを開発中です。カウントダウンコンポーネントは次のようになります。componentDidMountは、ReactJSのsetStateの後に呼び出されないようです。
const Countdown = React.createClass({
getInitialState: function() {
return {
remaining: 10,
running: true,
};
},
componentDidMount: function(){
if (this.state.running) {
setInterval(this.tick, 1000);
} else {
console.log("already paused");
};
},
tick: function(){
if (this.state.remaining === 0) {
this.setState({ remaining: 10 });
this.props.updateStats();
} else {
this.setState({ remaining: this.state.remaining -1 });
};
},
handlePauseClick: function(){
this.setState({ running: false });
},
render: function(){
const s = this.state.remaining;
return (
<div className='ui centered card'>
<div className='content centered'>
<h1>{helpers.secondsToHuman(s)}</h1>
<ButtonControls
handlePauseClick={this.handlePauseClick}
/>
</div>
</div>
)
},
});
カウントダウンが開始されます。一時停止ボタンをクリックすると停止するはずです。 componentDidMountは唯一の実行中のタイマーが真で実行されます。
if (this.state.running) {
setInterval(this.tick, 1000);
} else {
console.log("already paused");
};
でクリックを処理した後:
this.setState({ running: false });
私は、コンポーネントが再レンダリングされると、そのcomponentDidMountが再び実行されることを期待していました。しかし、これは起こっていません。 componentDidMountは1回だけ実行されるようです。リアクトコンポーネントは、それがsetState
後に呼び出されていない理由です、ツリーに装着した場合、あなたのアイデアを
おかげ
ありがとう@leo。 componentDidUpdateについて知らなかった。しかし、それでもまだ正しく動作していません。 componentDidMountの間隔がまったく停止していない可能性はありますか? –
私は自分の答えを編集して、それをチェックして、あなたのニーズに適応しようとしました。 – lustoykov
ありがとうございます。今度は間隔が作成され、指数関数的にクリアされないようです。私はそれと一緒に遊ぶよ。 –