리액트의 컴포넌트를 구성하는 방식에는 함수형 컴포넌트, 클래스 기반 컴포넌트가 있다.
자바 개발을 주로 해온 나는 클래스가 친숙해서 관심이 갔었다.
리액트 16.8 이전 버전에서는 React Hook 이라는 개념이 도입되기 전이라
클래스 컴포넌트에서 상태관리를 해야 했었다고 한다.
현재는 리액트 공식문서에서 지원은 하지만 사용하지 말라고 권고하고 있다.
Component
is the base class for the React components defined as JavaScript classes. Class components are still supported by React, but we don’t recommend using them in new code.
함수형 컴포넌트와 클래스 컴포넌트 구문을 비교해보자
const Users = () => {
const [showUsers, setShowUsers] = useState(true);
const toggleUsersHandler = () => {
setShowUsers((curState) => !curState);
};
const usersList = (
<ul>
{DUMMY_USERS.map((user) => (
<User key={user.id} name={user.name} />
))}
</ul>
);
return (
<div className={classes.users}>
<button onClick={toggleUsersHandler}>
{showUsers ? 'Hide' : 'Show'} Users
</button>
{showUsers && usersList}
</div>
);
};
export default Users;
class Users extends Component {
state = {};
constructor() {
super();
this.state = {
showUsers: true,
};
}
toggleUsersHandler() {
this.setState((curState) => {
return { showUsers: !curState.showUsers };
});
}
render() {
const usersList = (
<ul>
{DUMMY_USERS.map((user) => (
<User key={user.id} name={user.name} />
))}
</ul>
);
return (
<div className={classes.users}>
<button onClick={this.toggleUsersHandler.bind(this)}>
{this.state.showUsers ? "Hide" : "Show"} Users
</button>
{this.state.showUsers && usersList}
</div>
);
}
}
render()
라는 예약어를 통해 jsx를 반환
this
예약어를 통해 이벤트 바인딩
프로젝트의 특성과, 팀 조직간의 개발 환경, 컨벤션 등에 따라 적절한 방식을 선택하는게 중요한 것 같다.