Lifecycle 기본 순서
- constructor
- render
- componentDidMount
- (fetch 완료)
- render
- (setState)
- componentDidUpdate (setState 되었기 때문에 컴포넌트 업데이트 발생)
Lifecycle로 인한 오류
- constructor
- render
- console.log("render") >>> 문제 없음
- console.log(this.state.data[0].name) >>> 💥에러 발생
빈 배열의 0번째 index, 즉 this.state.data[0] 은 undefined이기 때문에 위와 같은 에러가 발생하게 됩니다.
해결방법
AND 연산자(&&)를 사용한 조건부 렌더링
- 조건을 걸어서 내가 원하는 데이터가 있는 경우에만 렌더링을 시켜주는 방법으로 에러를 해결할 수 있습니다.
부모 - 자식 Lifecycle
- 부모 constructor
- 부모 render (부모 render 안에 있는 자식 컴포넌트로 넘어감)
- 자식 constructor
- 자식 render
- 자식 componentDidMount (여기까지 하고 부모 컴포넌트로 다시 넘어감)
- 부모 componentDidMount
- 부모 fetch 완료 (setState 발생 > 업데이트 발생 > 다시 render)
- 부모 render (부모 render 안에 있는 자식 컴포넌트로 넘어감)
- 자식 render
- 자식 componentDidUpdate
(componentDidMount는 최초 렌더 시 한 번만 실행되기 때문에 componentDidUpdate 발생. 여기까지 하고 다시 부모로 넘어감.)
- 부모 componentDidUpdate
(componentDidMount는 최초 렌더 시 한 번만 실행되기 때문에 componentDidUpdate 발생)