this.timerID
is a numeric, non-zero value which identifies the timer created by the call to setInterval()
; this value can be passed to clearInterval
to clear the timer.
So when calling the setInterval in componentDidMount like
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
you want to execute the tick()
function every 1 sec a
fter the component has mounted. Now when you navigate to another component and your current component has unmounted, if you do not clear the interval call to tick()
function, it will continue to be executed.
Hence in the componentWillUnmount
function you timer is cleared which is identified by the numeric value returned by setInterval
which is stored in this.timerID
componentWillUnmount() {
clearInterval(this.timerID);
}
so the complete code as provided in the React docs is
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
ReactDOM.render(
<Clock />,
document.getElementById('root')
);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…