이전 섹션에서 다룬 째깍거리는 시계 예시를 다시 생각해보자. 엘리먼트 렌더링에서는 UI를 업데이트 하는 한 가지 방법만 배웠고, 렌더링 된 출력값을 변경하기 위해 ReactDOM.render()
를 호출했다.
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
***ReactDOM.render(
element,
document.getElementById('root')
);***
}
setInterval(tick, 1000);
이 섹션에서는 Clock 컴포넌트를 완전히 재사용하고 캡슐화 하는 방법은 배운다. 이 컴포넌트는 스스로 타이머를 설정할 것이고 매초 스스로 업데이트 한다.
시계가 생긴 것에 따라 캡슐화하는 것으로 시작할 수 있다.
function Clock(props) {
return (
***<div>
<h1>Hello, world!</h1>
<h2>It is {props.date.toLocaleTimeString()}.</h2>
</div>***
);
}
function tick() {
ReactDOM.render(
<Clock date={new Date()} />,
document.getElementById('root')
);
}
setInterval(tick, 1000);
그러나 여기에는 중요한 요건이 누락되어 있다. Clock
이 타이머를 설정하고 매초 UI를 업데이트하는 것이 Clock
의 구현 세부사항이 되어야 한다.
이상적으로 한 번만 코드를 작성하고 Clock이 스스로 업데이트하도록 만들어야 한다.
ReactDOM.render(
***<Clock />,***
document.getElementById('root')
);
이것을 구현하기 위해서 Clock
컴포넌트에 ***"state"***를 추가해야 한다.
State는 props와 유사하지만, 비공개이며 컴포넌트에 의해 완전히 제어된다.
다섯 단계로 Clock
과 같은 함수 컴포넌트를 클래스로 변환할 수 있다.
React.Component
를 확장하는 동일한 이름의 ES6 class를 생성한다.render()
라고 불리는 빈 메서드를 추가한다.