본문 바로가기
프로그래밍

React 7 - Component Lifecycle

by Youngbin Kwon 2020. 9. 26.

리액트의 컴포넌트는 생명주기 (Life Cycle)를 가진다. Lifecycle API는, 컴포넌트의 생성부터 소멸 사이의 여러 시점에서 호출될 수 있는 다양한 메소드를 말한다.

 

Mounting 관련 메소드

  • constructor() : 컴포넌트 생성자 함수. 컴포넌트가 새로 만들어질 때마다 호출된다.
  • componentWillMount() : 컴포넌트가 화면에 정의되기 직전에 호출되는 API. 현재는 잘 사용하지 않는다.
  • componentDidMount() : 컴포넌트가 화면에 나타났을 때 호출되는 메소드로, render() 이후에 실행된다. 가장 많이 쓰이는 메소드로 주로 외부 라이브러리 연동, Ajax 나 mock data 요청 등에 사용된다. 요소 render 이후에 데이터를 fetch 하여 state값을 지정하는 용도로 가장 많이 사용하였다. this.setState 사용하여 state 값 지정 -> state값 변경 후 render가 재실행 된다.

Updating 관련 메소드

  • static getDerivedStateFromProps() : 컴포넌트가 props로 받아온 값을 state로 동기화 하는 작업을 할 때 사용한다.
  • componentDidUpdate() : componentDidMount는 초기 컴포넌트 실행시 한 번만 실행되기 때문에, 이후에 state값이 업데이트 됐을 경우에 실행하는 함수로 componentDidUpdate를 사용한다.

부모 - 자식 데이터 전달 시 가장 많이 발생하는 오류

컴포넌트 내부에서 불러오는 배열이 선언되기 전이라서 발생하는 오류로, 조건부 렌더링을 사용하여 해결할 수 있다.

 

조건부 렌더링 (&&)

특정 조건을 만족할 때 해당 JSX를 렌더링해주는 방법으로 아래와 같은 방법으로 사용한다.

render(){
	console.log("render");
    return (
    	<div>this.state.data[0].name : {this.state.data[0] && this.state.data[0].name} </div>
    );
}

{} 내부에서, this.state.data[0]이 true일 경우에만 (&&의 앞에 조건을 부여한다) 뒤의 내용을 렌더링해준다.

조건부 렌더링은 1) 데이터가 정의된 이후에 특정 요소를 보여주고 싶을 경우, 2) 특정 조건에 따라서 보여지는 컴포넌트가 있을 경우 (팝업창, 추가기입 창 등) 등의 상황에서 사용할 수 있다.

 

🙌componentDidUpdate()

이번 프로젝트에서 url이 변경됐을 때에 제품 데이터를 다시 받아오는 기능에서 사용하고 싶었지만 개념이 부족하여 사용하지 못했던 lifecycle 메소드.

 

보통 아래 코드와 같이 사용한다.

componentDidUpdate(prevProps, prevState) {
 if (this.props.userName !== prevProps.userName) {
   this.fetchData(this.props.userName);
 }
}
  •  컴포넌트의 상태가 변경된 이후에 호출되는 메소드
  • prevProps와 prevState는 이전의 상태값을 의미
  • setState을 사용하여 현재 컴포넌트의 state를 업데이트할 수 있지만, if 조건 내부에 선언하지 않을 경우 무한 루프에 걸릴 수 있으므로 주의

'프로그래밍' 카테고리의 다른 글

React 8. setState, this.props.children  (0) 2020.09.29
[Allstar] 컨버스 웹사이트 클론 팀프로젝트 후기  (0) 2020.09.27
wecode +37 (9/23)  (0) 2020.09.23
wecode +35 (9/21)  (0) 2020.09.22
wecode +31 (9/17)  (0) 2020.09.17

댓글