커스텀 훅

리엑트 훅

컴포넌트 코드의 간소화, 캡슐화, 재사용성, 유지보수성의 증진을 약속

  • 함수 컴포넌트가 리액트와 밀접하게 연동돼 작업하면서 훅을 사용해 마운트, 렌더링, 언마운트와 같은 생명 주기 이벤트에 끼어들게 해준다.

  • 함수 컴포넌트에 훅을 사용하면 관련된 코드를 한 곳에 모을 수 있다.

훅 함수라는 사실을 명확히 하고 훅 규칙을 따라야 한다는 점을 나타내기 위해 커스텀 훅의 이름을 'use'로 시작

커스텀 훅

긴 함수를 여러 짧은 함수로 분리하는 것과 같은 방식으로, 훅이 수행되는 작업을 컴포넌트 외부에 있는 커스텀훅으로 추출해서 컴포넌트 코드를 단순화하고 기능을 재사용할 수 있게 준비할 수 있다.

기능을 커스텀 훅으로 분리

기능의 세부 내용을 훅으로 추상화 (캡슐화)

함수가 어떻게 동작하는지 보다 무엇을 하는지가 관건

  • 관련된 코드를 여러 곳에 흩뿌리는 대신 한 장소를 유지함으로써, 응집도와 유지보수성을 높힌다.

  • 기능을 커스텀 훅으로 이동시키면 해당 기능을 여러 컴포넌트에서 재사용할 수 있다.

  • 컴포넌트 뿐만 아니라 커스텀 훅도 다른 커스텀 훅이 제공하는 추가 기능을 최대한 활용할 수 있다.

  • 더 많은 기능을 커스텀 훅으로 이동함에 따라 컴포넌트 자체는 더 단순해지고, 상태를 받아와서 표시만 하는 프레젠테이션 컴포넌트와 비슷해진다.

  • 훅의 기능과 관련 있는 상태나 효과를 훅 내부에서 관리하고, 컴포넌트에게는 꼭 필요한 값만 반환하라

훅을 채택하기 전, 프레젠테이션 컴포넌트는 비즈니스 로직을 래퍼 컴포넌트에 맡겼다. 하지만 훅을 사용하면 비즈니스 로직을 더 쉽게 캡슐화하고 재사용하며 공유할 수 있다.

훅 규칙 따르기

코드를 조직화하고 명확하게 할 때 훅이 주는 도움과 훅이 제공하는 효율적인 코드 추상화와 재사용이라는 약속은 모두 매력적임

  • 그러나 훅이 이런 약속을 지키게 하기 위해, 리엑트 팀은 구현상의 결정을 내림

    • 커스텀 훅의 이름을 'use'로 시작

    • 최상위 수준에서만 훅을 호출

    • 리엑트 함수 안에서만 훅을 호출

최상위 수준에서만 훅을 호출하기

컴포넌트가 실행될 때 마다 일관되게 훅을 호출하는 것이 중요

컴포넌트가 실행될 때 마다 훅을 호출하는 횟수가 달라지는것을 피해야 한다. (호출의 일관성)

  • 훅 호출을 건너뛰거나 컴포넌트 훅 호출 횟수를 변경할 수 있는 시나리오는 피하자

    • 조건문 안에 훅 넣지 않기

    • 반복문 안에 훅 넣지 않기

    • 중첩된 함수 안에 훅 넣지 않기

  • 우리가 만든 훅은 항상 실행돼야만 하기 때문에, 훅을 조건 안에 넣는 대신, 훅 호출 안에 조건을 넣자.

리엑트 함수 안에서만 훅을 호출하기

훅을 사용하면 함수 컴포넌트가 상태를 소유할 수 있고 부수 효과를 발생시키거나 사용하는 시점을 관리 할 수 있다.

  • 훅을 사용하는 컴포넌트는 이해하기 쉽고 유지보수하기 쉽고 공유하기 쉬워야 한다.

  • 훅이 제공하는 상태는 예측 가능하고 신뢰성 있어야 한다.

Last updated