componentWillReceiveProps(nextProps) {
if (nextProps.seconds !== 0) {
this.setState({ seconds: nextProps.seconds });
setInterval(() => this.getStopTimer(this.state.seconds - 1), 1000);
}
}
私はこの反応を反応させてストップウォッチを作りました。反応中のカウントダウンタイマー
したがって、1秒ごとにメソッドgetStopTimer
を呼び出し、1つずつ減らしてから{this.state.seconds}
を使用してブラウザに表示します。
私はこれに新しいので、私は反応のライフサイクルフックについて単なる考えを持っています。
カウントダウンタイマーは最初の入力で動作していますが、再ロードせずにもう一度開始すると、前回の2倍の時間でタイマーが動作しています。最初の走行と同じように、ストップウォッチは1秒タイマーだったが、次の入力は2秒間同じであった。
これがなぜ起こっているのか説明してください。
getStopTimer(seconds) {
console.log(seconds);
if (seconds >= 0) {
this.setState({ seconds });
}
}
ここにはストップウォッチの子コンポーネントがあります。
import React, { Component } from 'react';
class Stopwatch extends Component {
constructor(props) {
super(props);
this.state = {
hour: 0,
minute: 0,
second: 0,
seconds: 0
};
}
componentWillReceiveProps(nextProps) {
if (nextProps.seconds !== 0) {
this.setState({ seconds: nextProps.seconds });
setInterval(() => this.getStopTimer(this.state.seconds - 1), 1000);
}
}
componentWillUnmount() {}
getStopTimer(seconds) {
console.log(seconds);
if (seconds >= 0) {
this.setState({ seconds });
}
}
render() {
return (
<div>
<p>{this.state.seconds} seconds remains!</p>
</div>
);
}
}
export default Stopwatch;
親子コンポーネントの完全なコードを表示できますか? –
私はストップウォッチコンポーネントを持っており、これを親コンポーネント内で呼びます。 –
新しい設定を行う前に 'clearInterval()'を実行する必要があります。また、 'componentWillUnmount'ライフサイクルフックでクリアする必要があります。解説しないと、2つの 'setInterval'が並行して実行されるため、毎秒2秒が削除されます。意味がありますか? – Jaxx