한마디로 Hook은 함수형 컴포넌트가 클래스형 컴포넌트의 기능을 사용할 수 있도록 해주는 기능입니다.
- React 16.8 버전 (2019년도) 에 추가된 공식 라이브러리
- 클래스형 컴포넌트에서만 쓸 수 있었던 state와 life cycle을 함수형 컴포넌트에서도 사용 가능
hook을 사용해 함수형 컴포넌트에서도 state와 life cycle를 다룰 수 있기에 클래스형 컴포넌트에서만 가능하던 상태관리를 더 손쉽게 할 수 있기 때문
함수형 컴포넌트들은 리렌더링이 될때, 함수 안에 작성된 모든 코드가 다시 실행됩니다.
이로 인해서 함수형 컴포넌트들은 기존에 가지고 있던 상태(state)를 전혀 기억할 수 없게 됩니다.
이는 함수내에 써져 있는 모든 코드 및 변수를 기억할 수 없다는 의미입니다.
반면에 Hook은 브라우저에 메모리를 할당 함으로써, 함수형 컴포넌트가 상태(state)를 가질 수 있게 해줍니다.
공식홈페이지에 따르면 Hook을 만든 이유는 다음과 같습니다.
그러나 Hook은 브라우저의 메모리 자원을 사용하기에 함부로 남발하면 오히려 성능저하를 불러올 수 있습니다.
컴포넌트의 state(상태)를 관리 할 수 있게 해줍니다.
렌더링 이후에 실행할 코드를 만들수 있습니다.
어떤 변수가 변경될때마다 특정기능이 작동하도록 할 수 있습니다.
부모 컴포넌트와 자식 컴포넌트간의 props를 전역적으로 선언하고 관리할 수 있게 해줍니다.
state 업데이트 로직을, reducer 함수에 따로 분리 할 수 있습니다.
컴포넌트나 HTML 요소를 래퍼런스로 관리할 수 있게 해줍니다.
특정 배열에 적힌 값이 변할 때만 값,함수를 다시 정의할 수 있다. (재랜더링시 정의 안함)