REACT

React , TypeScript | 커스텀 훅 만들기, 제너릭 generics

Hanee_ 2022. 11. 4. 15:39

커스텀 훅이란?

코드의 반복을 피하고 재사용성을 높이기 위해서 사용한다

 

사용 방법

우선 커스텀 훅은 항상 use로 시작해야 한다.

 

 

예제는 다음과 같다.

 

[useInput.tsx]

import { Dispatch, SetStateAction, useCallback, useState } from 'react';

const useInput = <T = any>(initialData: T): [T, (e: any) => void, Dispatch<SetStateAction<T>>] => {
  const [value, setValue] = useState(initialData);
  const handler = useCallback((e) => {
    setValue(e.target.value);
  }, []);
  return [value, handler, setValue];
};
export default useInput;

 

✅ T는 제러닉이다

<T>가 적힌 타입들의 의미는 initialData로 string이 오면 T가 자동으로 string이 되고, 리턴값도 string이 된다는 뜻이다. (이 부분이 any 타입과의 차이! any로 작성하면 인풋값과 아웃풋 타입이 다를 수 있음)

 

✅ 코드를 보면 알 수 있 듯 리턴값으로 JSX가 아닌 object나 배열값을 리턴한다.

 

✅ 커스텀 훅을 사용해서 만든 기능은 각 컴포넌트에서 독립된 상태를 가진다.

 

 

 

import useInput from '@hooks/useInput';

	...
    
    const [email, onChangeEmail] = useInput('');
    const [nickname, onChangeNickname] = useInput('');
    
    ...

커스텀 훅을 import 해서 반복되는 코드를 줄일 수 있다

 

 

커스텀 훅 만들 시 주의사항

  • 커스텀 훅을 사용하지 않아도 되는 부분에서 조차 사용하지 않았는가?
  • 만들어진 커스텀 훅은 한 가지 기능만을 하고 있는가?
  • 혹시 사이드 이펙트를 일으킬 부분이 있지 않는가? 여러가지 경우의 수를 생각해서 작성할 것