componentWillReceiveProps(nextProps) {
if (nextProps.seconds !== 0) {
this.setState({ seconds: nextProps.seconds });
setInterval(() => this.getStopTimer(this.state.seconds - 1), 1000);
}
}
我有這段代碼在reactjs中製作秒錶。倒計時計時器
因此,在每一秒鐘它調用一個方法getStopTimer
並減少第二個,然後使用{this.state.seconds}
在瀏覽器中顯示。
我對生命週期鉤子只有一個簡單的想法,因爲我對此很陌生。
倒計時器正在對我的第一個輸入進行處理,但是當我再次給它開始時沒有重新加載時,定時器運行的時間是前一次的兩倍。就像第一次運行一樣,秒錶用於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