목표
- 컴포넌트의 생명 주기 대해 톺아본다.
모든 컴포넌트는 여러 종류의 “생명주기 메서드”를 가지며, 이 메서드를 오버라이딩하여 특정 시점에 코드가 실행되도록 설정할 수 있습니다.
컴포넌트의 인스턴스가 생성되어 DOM 상에 삽입될 때에 다음 메서드가 순서대로 호출된다. (진하게 표시된 메서드만 자주 사용된다.)
리액트에서 생성자는 보통 두 가지 목적을 위해 사용된다. 필요하지 않다면 생성자를 구현하지 않아도 된다.
constructor(props) {
super(props);
// 여기서 this.setState()를 호출하면 안 됩니다!
this.state = { counter: 0 };
this.handleClick = this.handleClick.bind(this);
}
💡 주의
state에 props를 복사하면 안 됩니다! 가장 흔히 범하는 실수 중 하나입니다.
constructor(props) { super(props); // 이렇게 하지 마세요! this.state = { color: props.color }; }
- color props의 값이 변하더라도 state에 반영되지 않는다는 버그가 발생한다.
- 이 경우는 props의 갱신을 의도적으로 무시해야 할 때만 이와 같은 패턴을 사용해야 한다고 한다.
- 이 경우, 해당 props의 이름을 initialColor 또는 defaultColor 등으로 하는 것이 좋다.
props 또는 state가 변경되면 갱신이 발생한다. 아래 메서드들은 컴포넌트가 다시 렌더링될 때 순서대로 호출된다.
componentDidUpdate(prevProps, prevState, snapshot)
componentDidUpdate(prevProps) {
// 전형적인 사용 사례 (props 비교를 잊지 마세요)
if (this.props.userID !== prevProps.userID) {
this.fetchData(this.props.userID);
}
}
컴포넌트가 DOM 상에서 제거될 때에 호출된다.