본문 바로가기

React

React life cycle method 생각의 흐름대로 정리하기

컴포넌트의 라이프사이클은 컴포넌트 상태에 변화가 있을 때마다 실행하는 메서드이다. 크게 마운트, 업데이트, 언마운트로 나눈다.

마운트

DOM이 생성되고 웹 브라우저 상에 나타나는 것을 마운트(mount)라고 함.

 

컴포넌트 만들기 constructor getDerivedStateFromProps render componentDidMount

 

  • getDerivedStateFromProps: props의 변화에 따라 state 값에도 변화를 주고 싶을 때 사용, props로 받아온 값을 state로 동기화 시키는 용도로 사용
  • componentDidMount: 컴포넌트를 다 만들고 첫 렌더링 다 마친 후 실행. 다른 자바스크립트 라이브러리 or 프레임워크 함수 호출, 이벤트 등록, setTimeout, setinterval, 네트워크 요청같은 비동기 작업 처리

업데이트

props 변경 / state 변경 / 부모 컴포넌트 리렌더링 getDerivedStateFromProps shouldComponentUpdate render getSnapshotBeforeUpdate (브라우저 상의 실제 DOM 변화) componentDidUpdate

 

  • shouldComponentUpdate: 컴포넌트가 리렌더링을 해야할지 말아야할지 결정, true 반환 시 render 호출, false 반환 시 여기서 작업 취소
  • getSnapshotBeforeUpdate: 컴포넌트 변화를 DOM에 반영하기 바로 직전에 호출하느 메서드. 여기서 반환하는 값은 componentDidUpdate에서 세번 째 파라미터인 snapshot 값으러 전달 받을 수 있음.
  • componentDidUpdate: 리렌더링 완료 후 실행. 업데이트가 끝난 직후 이므로 DOM 관련 처리를 해도 무방하다. prevProps 또는 prevState를 사용해서 컴포넌트가 이전에 가졌던 데이터에 접근할 수 있다. 또 getSnapshotBeforeUpdate에서 반환한 값이 있다면 여기서 snapshot값을 전달 받을 수 있다.

언마운트

  • componentWillUnmount: 컴포넌트가 브라우저 상에서 사라지기 전에 호출하는 메서드. componentDidMount에서 등록한 이벤트, 타이머, 직접 생성한 DOM 제거 작업

 

*componentDidCatch

리액트 v16에서 새롭게 도입되었으며, 컴포넌트 렌더링 도중에 에러가 발생했을 때 애플리케이션이 먹통이 되지 않고 오류 UI를 보여 줄 수 있게 해준다. 자기 자신의 컴포넌트에서 발생한 에러를 잡아낼 수 는 없고 자신의 this.props.children으로 전달되는 컴포넌트에서 발생하는 에러만 잡아낼 수 있음