React 커스텀 훅에 대해서 알아보자 !

혼빈·2024년 9월 26일

React 커스텀 훅 가이드

React에서 훅(hook)은 함수형 컴포넌트에서 상태(state)와 생명주기(lifecycle) 기능을 사용할 수 있게 해주는 강력한 도구입니다. 그 중에서도 커스텀 훅은 코드의 재사용성을 높이고 로직을 모듈화하는 데 매우 유용합니다. 이번 포스트에서는 커스텀 훅의 개념, 생성 방법, 그리고 활용 사례를 자세히 살펴보겠습니다.

커스텀 훅이란?

커스텀 훅은 사용자 정의 훅으로, 기본 훅인 useState, useEffect, useContext 등을 활용하여 새로운 훅을 만들어내는 것입니다. 커스텀 훅은 로직을 캡슐화하고, 여러 컴포넌트에서 쉽게 재사용할 수 있도록 돕습니다.

커스텀 훅의 필요성

  • 코드 재사용: 동일한 로직을 여러 컴포넌트에서 사용할 수 있습니다.
  • 가독성 향상: 컴포넌트가 간결해지고, 각 컴포넌트의 역할이 명확해집니다.
  • 테스트 용이성: 분리된 로직을 테스트하기가 쉬워집니다.

커스텀 훅 만드는 방법

1. 훅 함수 정의

커스텀 훅은 일반 함수처럼 정의하며, 함수 이름은 use로 시작해야 합니다. 이는 React의 규칙을 따르는 것이며, 이 규칙을 통해 해당 함수가 훅이라는 것을 명확히 합니다.

2. 내부 훅 사용

필요에 따라 기본 훅을 사용하여 상태를 관리하거나 사이드 이펙트를 처리합니다.

3. 값 반환

컴포넌트에서 사용할 수 있도록 필요한 값이나 함수를 반환합니다.

예제: 카운터 훅 만들기

아래는 간단한 카운터 기능을 제공하는 커스텀 훅 useCounter의 예입니다.

import { useState } from 'react';

function useCounter(initialValue = 0) {
  const [count, setCount] = useState(initialValue);

  const increment = () => setCount(c => c + 1);
  const decrement = () => setCount(c => c - 1);
  const reset = () => setCount(initialValue);

  return { count, increment, decrement, reset };
}

커스텀 훅 사용하기

이제 useCounter 훅을 React 컴포넌트에서 사용할 수 있습니다.

import React from 'react';
import useCounter from './useCounter';

function CounterComponent() {
  const { count, increment, decrement, reset } = useCounter(10);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
      <button onClick={reset}>Reset</button>
    </div>
  );
}

커스텀 훅의 장점

  1. 재사용성: 여러 컴포넌트에서 동일한 훅을 호출하여 코드 중복을 줄일 수 있습니다.
  2. 가독성: 컴포넌트가 간결해져 각 컴포넌트의 역할이 명확해집니다.
  3. 모듈화: 로직을 독립된 함수로 분리함으로써 테스트와 유지보수가 용이해집니다.

커스텀 훅의 활용 사례

  1. 폼 상태 관리: 폼 입력 값과 유효성 검사를 처리하는 커스텀 훅을 만들 수 있습니다.
  2. API 호출: 데이터 fetching을 처리하는 훅을 만들어 여러 컴포넌트에서 API 호출을 재사용할 수 있습니다.
  3. 타이머 관리: 타이머 로직을 캡슐화하여 필요할 때 쉽게 사용할 수 있습니다.

결론

React의 커스텀 훅은 복잡한 상태와 로직을 효과적으로 관리하고, 코드의 재사용성을 높여주는 훌륭한 도구입니다. 이번 포스트를 통해 커스텀 훅을 만드는 방법과 그 이점을 이해하는 데 도움이 되었기를 바랍니다. 실제 프로젝트에 적용해 보시고, 효율적인 React 개발을 경험해 보세요!

profile
코딩중

0개의 댓글