
Hooks를 이해하려면 로직 재사용에 대해 생각해야 합니다. 일반적인 재사용 방법은 함수 혹은 클래스를 작성하고 호출하는 것입니다. 그리고 React는 함수, 클래스를 사용해 컴포넌트를 작성합니다. 컴포넌트는 UI를 렌더링 하는 데 있어 매우 중요한 개념입니다.
컴포넌트 내부에 캡슐화 된 로직은 다른 컴포넌트와 공유가 쉽지 않습니다.
로직을 재사용하기 위해 React 앱에서 Render Props 와 같은 복잡한 패턴을 사용해야 합니다.
함수는 코드를 재사용 하기 위한 완벽한 메커니즘.(함수의 로직을 다른 함수로 공유하는 데 최소한의 노력만 필요하니까) 다만, 함수는 내부에서 상태(state)를 관리 할 수 없는 문제를 가집니다.
이러한 문제는 Hooks을 통해 해결할 수 있습니다.
Hook은 완전하게 캡슐화 처리되므로, 현재 실행 중인 컴포넌트에서 Hook을 호출할 때에도 격리된 로컬 상태를 유지합니다. 이러한 특성은 Hook을 매우 강력하게 만듭니다. Hook은 상태를 공유하는 방법이 아니라, 상태 저장 로직을 공유하는 방법입니다. 결과적으로 Hook은 React의 단방향 데이터 흐름을 깨트리지 않습니다.
Hooks는 클래스를 사용할 때 보다 번들된 파일의 크기를 줄여 다소 성능 향상을 기대할 수 있습니다.
컴포넌트와 훅 함수를 작성할 때 순수함을 지켜야 하는 것은 React의 주요 규칙으로, 규칙을 준수함에 따라 예측 가능하고 디버깅이 쉬워지며 React가 코드를 자동으로 최적화하는데 도움을 줄 수 있습니다.
훅(Hook) 함수는 조금 특별할 뿐인 일반 JavaScript 함수로, 다음 2가지 규칙을 준수해야 합니다.