컴포넌트의 라이프사이클은 컴포넌트 상태에 변화가 있을 때마다 실행하는 메서드이다. 크게 마운트, 업데이트, 언마운트로 나눈다.
마운트
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으로 전달되는 컴포넌트에서 발생하는 에러만 잡아낼 수 있음
'React' 카테고리의 다른 글
React Router로 렌더링하는 컴포넌트에 prop 전달하기 (1) | 2020.03.03 |
---|---|
create-react-app 없이 react project만들기 (2) | 2020.02.26 |
리액트 이벤트 핸들러 네이밍 (0) | 2019.10.16 |
redux-saga의 주요함수(delay, call, put, all, takeEvery, takeLatest) (0) | 2019.10.06 |
모든 컴포넌트에 React.memo를 사용해도 되나요? (0) | 2019.09.29 |