Я играл с React Example, который находится на его официальном сайте:
Моя проблема немного сложнее:
У меня есть часы Component
, которые отображают текущее время на экране, используя
new Date().toLocaleTimeString()
Код : Этот код отлично работает
import React, { Component } from 'react'
import ReactDOM from 'react-dom';
class Clock extends Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(), //problematic line
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>
)
}
}
function Root() {
const element = <Clock />
ReactDOM.render(
element,
document.getElementById('root')
);
}
export default Root;
Задача
Но проблема в том, что когда я меняю () => this.tick()
на this.tick()
или this.tick
, таймер запускается только в первый раз и не работает непрерывно. Я очень запутался в этом случае:
Может ли кто-нибудь сказать мне, в чем разница между () => this.tick()
и this.tick()
в этом случае или почему таймер не обновляется, когда я изменяю () => this.tick()
на this.tick()
?