React에서 컴포넌트를 만들 때 클래스형
컴포넌트와 함수형
컴포넌트 2가지 방식이 있다.
이전에는 클래스형 컴포넌트를 주로 사용하였지만 2019년 React v16.8 부터 함수형 컴포넌트에 리액트 훅(Hook)이 추가 되어 현재는 공식 문서에서도 함수형 컴포넌트와 훅을 함께 사용할 것을 권장하고 있다.
여기서 컴포넌트가 뭔가 간단히 짚고 넘어가보자 데이터가 주어졌을 때 이에 맞추어 UI를 만들어 주는 기능을 하는 것은 물론, 라이프 사이클 API를 통해 컴포넌트가 화면에 나타날 때, 사라질 때, 변할 때 작업들을 수행할 수도 있다.
컴포넌트 목적에 따라 presentational, container 컴포넌트로 나누기도 한다.
React Hook
으로 해결State는 컴포넌트 내부에서 바뀔 수 있는 값이다.
constructor
에서 this.state 로 초기 값을 설정한다.constructor
없이도 state 초기 값 설정 가능하다.this.setState()
를 통해 state 값을 변경한다.useState()
로 state를 사용한다.useState()
를 호출하면 배열이 반환되는데 첫 번째 원소는 현재 상태 두 번째 원소는 상태를 바꿔주는 함수이다.props
는 properties
를 줄인 표현으로 컴포넌트 속성을 설정할 때 사용한다.
props
는 부모 컴포넌트가 자식 컴포넌트에게 값을 전달하는 기능을 한다.
this.
를 붙여야 한다.const
+ 함수 형태로 선언한다.this
가 필요없다.React에서 컴포넌트는 여러 종류의 생명주기 메소드
를 가지며 이 메소드를 오버라이딩(상속하여 재정의) 하여 특정 시점에 코드가 실행되도록 설정 한다.
하지만 이는 클래스 컴포넌트에 해당하는 얘기이며 함수형 컴포넌트는 Hook
을 사용해 생명주기에 원하는 동작을 한다.
Life Cycle은 크게 세 단계로 나뉜다.
생성자 메소드이다. 컴포넌트가 생성되면 가장 먼저 실행된다. 이 메소드는 초기 state를 정할 수 있다.
함수형에서는 useState() 훅을 사용하여 state를 설정할 수 있다.
컴포넌트를 렌더링 하는 메소드이다.
함수형 컴포넌트에서는 render를 쓰지 않고 컴포넌트를 렌더링할 수 있다.
컴포넌트의 첫 렌더링이 마치고 나면 호출되는 메소드이다. 즉 이 메소드가 호출이 될 때는 컴포넌트가 화면에 나타나있는 상태다.
함수형 컴포넌트에서는 useEffect() 훅을 이용해 componentDidMount와 componentDidUpdate, componentDidUnmount까지 나타낼 수 있다.
리렌더링을 마친 후 변화가 모두 반영된 뒤 실행. 업데이트가 끝난 직후임으로 DOM 관련 처리가 가능하다. 매개변수로는 prevprops , prevState가 있는데 이는 각각 업데이트 되기 전 props, state 이다.
dependency array 에 특정 값을 넣게 되면 값이 바뀔때 호출이 된다.
컴포넌트를 DOM에서 제거할 때 실행한다. componentDidMount에서 등록한 이벤트가 있다면 여기서 제거 작업을 한다. (e.g. removeEventListener) 만약에 setTimeout 을 걸었다면 clearTimeout 을 통하여 제거를 한다.
함수형 컴포넌트에서는 useEffect()의 return 부분에 Unmount할 때 cleanUp 메소드를 적어주면 된다.
React 공식홈페이지에서 함수형 컴포넌트를 사용하길 권장하고 있고 많은 개발자들이 선호하는 방식이다. 그래서 함수형 컴포넌트 사용을 추천한다.
하지만 훅 등장 이전에 만들어진 프로젝트 중 클래스형 컴포넌트로 이루어진 경우가 더 많아 클래스형 컴포넌트의 사용법도 알아야 할 것이다.
참고한 글