CS/React

[React] 클래스형 컴포넌트의 생명 주기 메서드

뽀글보리 2021. 10. 21. 20:11
반응형

1. 클래스형 컴포넌트의 생명 주기 메서드

  • 모든 컴포넌트는 1) 초기화 단계 2) 업데이트 단계 3) 소멸 단계를 거친다.
  • 초기화 단계 : 최초 컴포넌트 객체가 생성될 때
  • 업데이트 단계 : 컴포넌트의 속성값 또는 상태값이 변경될 때

1.1 Constructor 메서드

class MyCompoent extends React.Component { 
	constructor(props) { 
    	super(props) 
        this.state = { currentMovie: props.age < 10 ? '뽀로로' : '어벤저스', } 
    } 
}
  • 초기 속성값으로부터 상태값을 만드는 경우
  • super함수를 호출하지 않으면 컴포넌트가 제대로 동작하지 않는다.
  • 상태값을 직접 할당하는 것은 constructor 메서드에서만 허용된다.

 

constructor 메서드에서는 setState 메서드를 호출하지 말자

  • setState 메서드 호출은 컴포넌트가 마운트된 이후에만 유효하므로, 호출 시 무시된다.

1.2 getDerivedStateFromProps 메서드

class MyComponent extends React.Component { 
	state = { prevSpeed: this.props.speed, imMovingFaster: false, } 
    
    static getDerivedStateFromProps(props, state){ 
    	if (props.speed !== state.prevSpeed){ 
        	return { 
            	isMovingFaster: state.prevSpeed < props.speed, 
                prevSpeed: props.speed, 
             } 
         } 
         return null 
     } 
}
  • 이전 속성값과 이후 속성값 모두에 의존적인 상태값이 필요할 때
  • 주로 애니메이션과 같은 속성값으로 상태값을 계산할 때 유용하게 쓰인다.

잘못 사용하는 경우

  • 속성값 변화에 따른 API 호출 ⇒ ComponentDidUpdate
  • 속성값을 입력으로 하는 메모이제이션 ⇒ render 내에서 loadash 패키지 사용
  • 속성값 변경 시 상태값 초기화 지양

1.3 render 메서드

  • 무조건 작성해야 하는 메서드
  • 화면에 보여질 내용을 결정하며 속성값 & 상태값만으로 결정되어야 한다.
  • 부수 효과(서버 통신, 쿠키에 저장 등)가 필요하다면 다른 생명 주기 메서드에서 하면 된다.

1.4 ComponentDidMount 메서드

  • render 메서드의 반환값이 실제 돔에 반영된 직후 호출된다.
  • API호출을 통해 데이터를 가져올 때 (setState 메서드가 마운트 이후에만 동작하기 때문)

1.5 shouldCompoenentUpdate 메서드

  • 반환값이 true인 경우 : render 메서드가 호출
  • 반환값이 false인 경우 : 업데이트 단계가 멈춘다.
class MyComponent extends React.Component{ 
	shouldComponentUpdate(nextProps, nextState) { 
    	const { price } = this.state; 
        return price !== nextState.price; 
     } 
}
  • 성능 최적화를 위한 메서드, But 성능 이슈가 발생했을 떄 작성해도 늦지 않다.

1.6 getSnapshotBeforeUpdate 메서드

  • 이전 돔 요소의 상태값을 가져올 때
  • getSnapshoptBeforeUpdate가 반환한 값은 componentDidUpdate 메서드의 세 번째 인자로 들어간다.

1.7 componentDidUpdate 메서드

componentDidUpdate(prevProps, prevState, snapshot)

  • 업데이트 단계에서 마지막으로 호출됨
  • ex) 사용자가 변경되었을 때 친구 목록 API 다시 호출
  • useEffect 훅을 사용하면 됨

1.8 componentWillUnmount 메서드

  • 소멸 단계에서 호출되는 유일한 생명 주기 메서드
  • 타이머 해제, 구독 해제 등의 처리

1.9 getDerivedStateFromError, componentDidCatch 메서드

getDerivedStateFromError

  • 렌더 단계에서 호출된다
  • 에러 정보를 상태값에 저장해서 화면에 나타내는 용도

componentDidCatch

  • 커밋 단계에서 호출된다
  • 에러 정보를 서버로 전송하는 용도
반응형

'CS > React' 카테고리의 다른 글

[Redux] 리덕스로 상태 관리하기  (0) 2021.10.29