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