Frontend/Study
[React] React 완벽 가이드 섹션 13 클래스 컴포넌트
BeNI
2022. 8. 23. 15:58
728x90
1. 클래스 컴포넌트
- 과거에 많이 사용한 컴포넌트 선언 방식
* React 16.8이전에는 사이드 이펙트(훅)를 다루기 위해서는 클래스 기반 컴포넌트를 사용했어야 했다.
// 클래스
class User extends Component {
render(){
return <li className={classes.user}>{this.props.name}</li>;
}
}
// 함수형
const User = (props) => {
return <li className={classes.user}>{props.name}</li>;
};
- props는 this예약어를 사용해야하고, Component를 상속받아야 한다.
- render() 를 사용한다.
class Users extends Component {
constructor(){
super();
this.state = {
// 상태 조각과는 상관없이 state는 객체가 된다.
showUsers: true,
}
}
toggleUsersHandler() {
this.setState({showUsers: false}); // state 바꾸기
this.setState((curState) => {
return {showUsers : !curState.showUsers} //과거 값에 기반해 state 바꾸기
})
}
render(){
return (
<div className={classes.users}>
<button onClick={this.toggleUsersHandler.bind(this)}> // 자바스크립트 방식
{showUsers ? 'Hide' : 'Show'} Users
</button>
{showUsers && usersList}
</div>
);
}
}
2. 클래스 컴포넌트 생명주기
- 클래스 기반 컴포넌트는 리액트 훅을 사용할 수 없다.
클래스형 | 함수형 | |
componentDidMount | 컴포넌트가 마운트되고 dom에 랜더링 될때 | useEffect(...,[]) |
componentDidUpdate | 컴포넌트가 업데이트 될때 | useEffect(...,[someValue]) |
componentWillUnMount | 컴포넌트가 dom에서 삭제되기 직전에 호출 | useEffect(()=>{return()=>{...}}, []} * cleanup 함수 |
3. 클래스 컴포넌트에서 Context 사용
class UserFinder extends Component {
static contextType = UsersContext; //컨텍스트가 하나일때만.. 두개이상이면 이 방법 x
// this.context.변수명 으로 접근가능
...
}
4. 함수형 컴포넌트에서 오류 경계
1) 오류 컴포넌트를 만든다
2) 오류가 날 컴포넌트를 감싸준다.
* Users 컴포넌트에서는 throw 문으로 error을 보낸다.
애플리케이션이 종료되지 않고 계속 실행하게 해준다.
728x90