class를 안쓰는 이유
class는 this문제가 있었다. constructor를 무조건 사용해야한다던가 bind를 해야했었다. (화살표 함수를 써도 되긴했음)
아무튼 그래서 function으로 되돌아 갔다고한다.
그리고 복잡하고 코드가 길어짐!
<script type="text/babel">
'use strict';
const e = React.createElement;
class LikeButton extends React.Component {
constructor(props) {
super(props);
this.state = {liked: false};
}
render() {
if (this.state.liked) {
return 'You liked this.';
}
//return e('button', {onClick: () => this.setState({liked: true})}, 'Like');
return (
<button onClick={()=>this.setState({liked:true})}>
Like
</button>
);
}
}
</script>
<script type="text/babel">
//ReactDOM.render(<LikeButton/>, document.querySelector('#root')) //17버전 코드 (18버전에서도 잘 돌아감)
ReactDOM.createRoot(document.querySelector('#root')).render(<LikeButton/>);
</script>
함수 컴포넌트
함수 컴포넌트를 사용하면 코드가 매우 간결해지는 효과가 있음.
<script type="text/babel">
'use strict';
function LikeButton(){ //함수 컴포넌트
const [liked, setLiked] = React.useState(false);
const onClicked = () => {
setLiked(true);
}
if(liked){
return "You liked this";
}
return (
<button onClick={onClicked}>Like</button>
)
}
</script>
<script type="text/babel">
//ReactDOM.render(<LikeButton/>, document.querySelector('#root')) //17버전 코드 (18버전에서도 잘 돌아감)
ReactDOM.createRoot(document.querySelector('#root')).render(<LikeButton/>);
</script>
라이브러리를 혼자서 재구성해보는 능력 (혹은 라이브러리 안쪽을 상상할 수 있는 능력)은 매우 중요하므로 연습하면 매우 좋다고함.