Hook은 React 16.8버전부터 추가된 기능이다. 기존 Class 컴포넌트의 문제점들을 개선하여 Functional 컴포넌트에서 React의 여러 기능들을 더 간단하고 편리하게 사용할 수 있게 되었다.
기존의 Classical React에 대표적으로 다음과 같은 불편한 점들이 있었다.
고차 컴포넌트 (HOC) : 리액트 컴포넌트(ReactComponent)를 인자로 받아 새로운 리액트 컴포넌트(EnhancedReactComponent)를 반환하는 함수
Render Props : props 에 JSX 를 렌더링하는 함수를 전달. render 함수에서, 전달받은 함수에 넣어주고 싶은 값을 함수의 인자로 전달하여 사용.
: useState는 state를 함수 컴포넌트 안에서 사용할 수 있게 해준다. state 변수와 해당 변수를 갱신할 수 있는 함수 이 두 가지 쌍을 반환한다. 클래스 컴포넌트의 this.state.count와 this.setState와 유사하다.
: useEffect Hook을 이용하여 react가 컴포넌트 렌더링 이후 동작을 명령할 수 있다. react는 이 Hook 안의 함수를 기억했다가(함수 = effect) DOM 업데이트를 수행한 이후에 불러낸다.
useEffect 정리
: useEffect의 두 번째 인자 ( dependencies )에 따라 ComponentDidMount, ComponentWillUnmount, ComponentDidUpdate의 역할을 할 수 있다.1. useEffect ( function ) -> dependencies가 아예 없으므로, ComponentDidMount ( 컴포넌트가 마운트 됐을 때 마다 ), ComponentWillUnmount ( 컴포넌트가 언마운트 될 때 마다 ), ComponentDidUpdate ( 컴포넌트가 업데이트 됐을 때 마다 ), function이 실행된다
2. useEffect ( function, [] ) -> dependencies가 비었으므로, ComponentDidMount에만 function이 실행된다.
3. useEffect ( function, [ number ] -> dependencies가 number이므로, number라는 state가 마운트 되거나 변할 때 마다 (ComponentDidMount, ComponentDidUpdate) function이 실행된다.
4. useEffect ( () => function, []) -> useEffect에서 첫 번째 인자의 함수가 다른 함수를 리턴한다면 ComponentWillUnMount시 호출된다. * []가 없으면 1번과 동일.
이외에 React 내장 함수로는 다음과 같은 함수들이 있다.
참고자료
Hook의 개요 - React 공식문서
React Hooks (1) Hook의 등장 배경 - youthfulhps
React Hooks에 대하여 - jinsk9268