목차
- 컴포넌트의 생명주기 도표
- 인스턴스 생성(Mounting) 시 호출되는 메서드들
- 업데이트(Update) 시 호출되는 메서드들
- 인스턴스 제거(Unmounting) 시 호출되는 메서드들
- 자주 사용되는 생명주기 메서드( render() / contructor() / componentDidMount() )
- 생명주기에 따른 코드 실행예시
1. 컴포넌트 생명주기
- 모든 컴포넌트는 각 생명주기에 따른 다양한 메서드를 보유한다
- 이 메서드를 선언하여 특정 시점(컴포넌트가 마운트되거나 언마운트되는 시점)에 코드가 실행되도록 설정 가능하다
-컴포넌트의 생명주기
- 인스턴스 생성(Mounting)
- 업데이트(Update)
- 인스턴스 제거(Unmounting)
2. 생성(Mounting)
- 컴포넌트의 인스턴스가 생성되어 DOM에 삽입될때 아래의 메서드들이 순서대로 호출됨
- construnctor()
- static getDerivedStateFromProps()
- render()
- componentDidMount()
<주의>
componentDidMount() 메서드는 컴포넌트의 return이 DOM에 렌더링된 후에 실행된다.
= 컴포넌트의 render() 메서드가 먼저 실행된 후 실행된다는 의미
3. 업데이트(Update)
- props 또는 state가 변경되면 갱신이 발생
- 컴포넌트가 재 렌더링될 때 아래의 메서드들이 순서대로 호출됨
- static getDerivedStateFromProps()
- shouldComponentUpdate()
- render()
- getSnapshotBeforeUpdate()
- componentDidUpdate()
4. 해제(Unmount)
- 컴포넌트가 DOM상에서 제거될 때 아래의 메서드 호출됨
- componentWillUnmount()
5. 자주 사용되는 생명주기 메서드
5-1. render() 메서드
- 클래스 컴포넌트에서 반드시 구현돼야 하는 유일한 메서드
- render() 메서드는 pure 해야 함.
- 즉, 컴포넌트의 state를 변경시키지 않고, 호출될 때 마다 동일한 결과 반환, 브라우저와 직접 상호작용 X
- render() 메서드 호출 시, this.props 또는 this.state의 값을 활용하여 아래 중 하나를 반환해야 함
- React 엘리먼트 - 보통 JSX를 사용하여 생성되며 DOM 노드 또는 사용자 정의 컴포넌트 생성을 지시함
- 배열 / Fragment - render()를 통하여 여러 엘리먼트를 반환
- Portal - 별도의 DOM 하위 트리에 자식 엘리먼트를 렌더함
- 문자열 / 숫자 - DOM상에 text 노드로 렌더됨
- 불리언 / null - 아무것도 렌더하지 않음
<참고1>
render() 메서드는 브라우저와 직접 상호작용하지 않기 때문에
( =render()메서드 호출 시, react가 렌더링 return 값을 일치 시키기 위해 DOM 업데이트)
만약 브라우저와 상호작용하는 작업이 필요하다면,
해당 작업을 componentDidMount()이나 다른 생명주기 메서드 내에서 수행할 것
<참고2>
shouldComponenUpdate()가 false 반환 시, render() 호출되지 않음
5-2. constructor() 메서드
- 메서드를 바인딩하거나 state를 초기화하는 경우, 해당 컴포넌트에 constructor 구현해야 함
- constructor() 메서드는 해당 컴포넌트가 마운트 되기 전에 호출됨
- React.Component를 상속한 컴포넌트의 생성자를 구현할 때는 다른 구문에 앞서 super(props)를 호출해야 함
- (constructor 내에서 this.props 정의 <> 버그 발생 가능)
- constructor 사용 목적
- this.state에 객체 할당하여 state를 초기화(constructor은 this.state를 지정할 수 있는 유일한 공간이다)
- 인스턴트에 이벤트 처리 메서드를 바인딩
5-3. componentDidMount() 메서드
- 컴포넌트의 retrun값이 DOM에 삽입(=컴포넌트 마운트)되고 난 후, React가 호출하는 함수
- 외부에서 데이터 불러와야 한다면, 네트워크 요청을 작성할 위치(db에서 데이터 가져올 때)
- 데이터 구독 설정할 위치
5-4. componentDidUpdate() 메서드
componentDidUpdate(prevProps, prevState, snapshot)
- 컴포넌트 갱신 시 DOM조작을 위해 활용
- 이전과 현재의 props 값을 비교해서 네트워크 요청
6.생명주기에 따른 코드 실행
- 브라우저가 프론트 서버에 요청을 보낸다.
- 프론트 서버가 브라우저에 응답을 한다 (렌더 메서드 호출로 화면 그린다-데이터 값이 없는 화면)
- 프론트 서버가 백엔드 서버에 요청을 보낸다.
- 백엔드 서버에서 응답을 준다.
- 백엔드 서버에서 응답을 받은 프론트 서버가 componentDidMount 생명주기 메서드에서 this.setState 메서드로 상태를 바꾼다.
- 이미 그려진 화면에 데이터 값을 넣는다.
'React > 1. 공식 문서 및 이론' 카테고리의 다른 글
hook1. 기본 (0) | 2022.04.26 |
---|---|
React6. state와 불변성 (0) | 2022.04.14 |
React 4-1. 컴포넌트(1) (0) | 2022.04.14 |
React3. ReactDOM.render() (0) | 2022.04.13 |
React 2. JSX? (0) | 2022.04.12 |
댓글