코드스테이츠에서 프로젝트를 진행하면서 드래그 위치에 맞춰 숫자가 카운드되는 Hook을 사용한 적이 있었는데 그때 처음 Custom Hooks를 접하게 되었다.
R개발자가 스스로 커스텀한 훅을 의미하며, 반복되는 로직을 함수로 뽑아내어 재사용이 가능하다.
여러 url을 fetch할 때, 여러 input에 의한 상태 변경 등 반복되는 로직을 동일한 함수에서 작동하게 하고 싶을 때 커스텀 훅을 주로 사용한다.
주의사항
1. 커스텀 hook 이름 앞에 use를 꼭 붙인다.
자동적으로 규칙이 맞는지 확인하지 못합니다. 특정 함수에 hook이 호출되는지 알 수 없다.
2. 각 input별로 같은 함수를 이용하지만 같은 state를 공유하는 것이 아니다.
hook은 state적인 특성을 갖고있어서 공유하지 않고 완전히 독립적이다.
const useFetch = ( initialUrl:string ) => {
const [url, setUrl] = useState(initialUrl);
const [value, setValue] = useState('');
const fetchData = () => axios.get(url).then(({data}) => setValue(data));
useEffect(() => {
fetchData();
},[url]);
return [value];
};
export default useFetch;
import { useState, useCallback } from 'react';
function useInputs(initialForm) {
const [form, setForm] = useState(initialForm);
// change
const onChange = useCallback(e => {
const { name, value } = e.target;
setForm(form => ({ ...form, [name]: value }));
}, []);
const reset = useCallback(() => setForm(initialForm), [initialForm]);
return [form, onChange, reset];
}
export default useInputs;