컴포넌트의 수명주기 LifeCycle
리액트 컴포넌트에는 수명주기 Lifecycle이 있습니다. 수명은 페이지가 렌더링 되기 전 준비과정부터 페이지가 사라질 때가지를 말합니다.
프로젝트를 하다보면 컴포넌트를 렌더링 하기 전에 처리해야할 작업이 있고, 렌더링 이후에 업데이트 하기 전 후 처리해야 할 작업 등이 있습니다. 이렇게 컴포넌트 수명 주기에 따른 처리를 위해 사용하는 것이 라이프사이클 매소드 입니다. 이것은 클래스형 컴포넌트에서만 사용할 수 있고, 함수형 컴포넌트에서는 Hooks를 사용하여 비슷한 기능을 사용할 수 있습니다.
라이프 사이클의 종류
- 마운트 Mount
- 업데이트 Update
- 언마운트 Unmount
마운트 Mount
DOM이 생성되고 웹 브라우저 상에 컴포넌트들이 나타나는 것을 마운트라고 합니다.
마운트를 할 때 여러 개의 메소드를 차례대로 호출합니다.
- constructor : 컴포넌트를 새로 만들 때마다 호출되는 클래스 생성자 메소드
- constructor(props) { ... }
- 초기 state 정의
- getDerivedStateFromProps : props에 있는 값을 state에 넣을 때 사용하는 메소드
- static getDerivedStateFromProps(nextProps, prevState) { ... }
- render : 개발자가 짠 UI 코드를 렌더링하는 메소드
- this.props 와 this.state 에 접근할 수 있읍
- 아무것도 보여주고 싶지 않다면 null 또는 false return
- 브라우저 DOM에 접근할 수 없음
- DOM 정보를 가져오거나 state에 변화를 주려면 componentDidMount에서 처리해야 함
- componentDidMount : 컴포넌트가 브라우저 상에 나타난 이후에 호출하는 메소드
- 비동기 작업 처리
업데이트 Update
컴포넌트는 다음 경우에서 업데이트를 합니다.
- 부모 컴포넌트가 넘겨주는 props가 바뀔 때
- 자신의 state가 바뀔 때
- 부모 컴포넌트가 리렌더링 될 때
- this.forceUpdate로 강제 렌더링을 트리거할 때
업데이트를 할 때는 다음 메소드들을 차례대로 호출합니다.
- getDerivedStateFromProps : 변화가 일어난 props에 있는 값을 state에 넣을 때 사용하는 메소드
- shouldComponentUpdate: 컴포넌트가 리렌더링되어야 할지 말아야 할지 여부를 결정하는 메소드
- true -> render 호출
- false -> 작업 취소
- render : 컴포넌트를 리렌더링 하는 메소드로 forceUpdate로 바로 수행될 수 있음
- getSnapshotBeforeUpdate: 컴포넌트 변화를 DOM에 반영하기 바로 직접에 호출하는 메소드
- 업데이트 직전의 값을 참고할 때 활용 ex) 스크롤바 위치 유지
- componentDidUpdate : 컴포넌트 업데이트 작업이 끝난 후 호출하는 메소드
- 리랜더링 완료 후 실행
- prevState 또는 preProps를 사용하여 컴포넌트가 이전에 가졌던 데이터에 접근 가능
- getSnapshotBeforeUpdate에서 반환한 snapshot 값을 전달 받을 수 있음
-
example )
getSnapshotBeforeUpdate(prevProps, prevState) {
if (prevState.array !== this.state.array) {
const { scrollTop, scrollHeight } = this.list
return { scrollTop, scrollHeight };
}
}
언마운트 Unmount
컴포넌트를 DOM에서 제거하는 것으로 componentWillUnmount 메소드만 호출합니다.
- componentWillUnmount : 컴포넌트가 웹 브라우저 상에서 사라지기 전에 호출하는 메소드
References
- 리액트를 다루는 기술 (김민준)
'웹 개발 > React' 카테고리의 다른 글
React) Hooks : useMemo를 이용하여 연산 최적화하기 (0) | 2021.02.16 |
---|---|
React ) Hooks : useReducer 사용하기 (0) | 2021.02.16 |
React) 사용자 입력 받아 데이터 추가, 제거하기 (0) | 2021.02.16 |
React) Ref란? (0) | 2021.02.16 |
React) 간단한 비밀번호 검증 예제 Password Validation (0) | 2021.02.16 |