과거에는 class component가 더많은 기능을 제공하여 많이 사용 했지만, 2019년 v16.8 부터 함수형 컴포넌트에 리액트 hook을 지원해 주어 현재는 공식 문서에서 함수형 컴포넌트와 hook을 함께 사용할 것을 권장하고 있다. 오늘은 무엇이 더 좋다 혹은 어떻게 사용한다가 아닌 사용하면서 몰랐었던 부분에 대해서 정리 할 것이다.
class component 와 Functional component 두가지 코드를 준비해 보았다.
// functional component
function ProfilePageFunc(props) {
const showMessage = () => {
alert('Followed ' + props.user);
};
const handleClick = () => {
setTimeout(showMessage, 3000);
};
return (
<button onClick={handleClick}>Follow</button>
);
}
// class component
class ProfilePageClass extends React.Component {
showMessage = () => {
alert('Followed ' + this.props.user);
};
handleClick = () => {
setTimeout(this.showMessage, 3000);
};
render() {
return <button onClick={this.handleClick}>Follow</button>;
}
}
같은 기능을 두가지 방법으로 표현한 코드입니다. 하지만 두 코드를 실행시키면 미묘한 차이를 발견할 수 있다.
function Test() {
const [userName , setUserName] = useState('Soon')
return(
<div>
<label>
<select value={userName} onChange={e => setUserName(e.target.value)}
<option value='Soon'>Soon</option>
<option value='Harry'>Harry</option>
<option value='Hwang'>Hwang</option>
</label>
<p>
<ProfilePageFunction user={userName} />
<b> (function)</b>
</p>
<p>
<ProfilePageClass user={userName} />
<b> (class)</b>
</p>
</div>
)
}
한번 순서에 맞게 따라해보자.
1. Follow 버튼을 누른다.
2. 3초가 지나기전에 선택한 profile 이름을 변경한다.