import React from "react";
export default class Clock extends React.Component {
//1. 초기화를 담당하는 영역
constructor(props){
super(props);
this.state = { date: new Date() };
}
//3. tick함수 추가
tick() {
this.setState({
date: new Date(),
})
}
//4. 컴포넌트 생성된 직후 실행
componentDidMount() {
console.log('componentDidMount');
this.timerID = setInterval(() => this.tick(), 1000)
}
//5. 컴포넌트가 업데이트 될 때 실행
componentDidUpdate() {
console.log("compoentDidUpdate");
console.log(this.state.date)
}
//6. 컴포넌트가 제거될 때 실행
componentWillUnmount() {
console.log('componentWillUnmount')
clearInterval(this.timerID)
}
//2.
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It si {this.state.date.toLocaleTimeString()}.</h2>
</div>
)
}
}
useEffect() hook 기본
Hook은 React 버전 16.8부터 React 요소로 새로 추가되었습니다. Hook을 이용하여 기존 Class 바탕의 코드를 작성할 필요 없이 상태 값과 여러 React의 기능을 사용할 수 있습니다.
import React, { useState } from 'react';
function Example() {
// "count"라는 새로운 상태 값을 정의합니다.
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
함수와 배열, 두가지 인자를 받습니다.또한 두번쨰 인자인 배열은 옵션이기 떄문에 사용하지 않아도 괜찮습니다.
App.js
import './App.css';
import ClassClock from './components/Clock'
function App() {
return <ClassClock />
}
export default App;
ClassClock.js
import React from "react";
export default class Clock extends React.Component {
constructor(props){
super(props);
this.state = { date: new Date() };
}
tick() {
this.setState({
date: new Date(),
})
}
componentDidMount() {
console.log('componentDidMount');
this.timerID = setInterval(() => this.tick(), 1000)
}
componentDidUpdate() {
console.log("compoentDidUpdate");
console.log(this.state.date)
}
componentWillUnmount() {
console.log('componentWillUnmount')
clearInterval(this.timerID)
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It si {this.state.date.toLocaleTimeString()}.</h2>
</div>
)
}
}