Custom Hook์ด๋?
๊ฐ๋ฐ์๊ฐ ์ปค์คํ ํ Hook!
์ํ ๋ณ๊ฒฝ ๋ฑ ๋ฐ๋ณต๋๋ ๋ก์ง์ ๋์ผํ ํจ์์์ ์๋ํ๊ฒ ํ๊ณ ์ถ์๋ ์ปค์คํ Hook์ ์ฌ์ฉํ๋ค.
Custom Hook์ ์ฅ์
1. ์ํ ๊ด๋ฆฌ ๋ก์ง์ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
2. ๋ณด๋ค ์ ์ ์์ ์ฝ๋๋ก ๋์ผํ ๋ก์ง์ ๊ตฌํํ ์ ์๋ค.
3. ์ง๊ด์ ์ผ๋ก ์ฝ๋๋ฅผ ์งค ์ ์์ด์ ๋ช ๋ฃํ๋ค.
Custom Hook ๋ง๋ค ๋ ๊ท์น
1. Custom Hook์ ์ ์ํ ๋๋ ํจ์ ์ด๋ฆ ์์ use๋ฅผ ๋ถ์ด๊ธฐ
2. Custom Hook์ผ๋ก ๋ง๋ค ๋ ํจ์๋ ์กฐ๊ฑด๋ถ ํจ์๊ฐ ์๋์ด์ผ ํ๋ค. ์ฆ return ํ๋ ๊ฐ์ ์กฐ๊ฑด๋ถ์ฌ์๋ ์๋๋ค.
3. ๋๊ฐ์ ๊ฒฝ์ฐ ํ๋ก์ ํธ ๋ด์ hooks ๋๋ ํ ๋ฆฌ์ Custom Hook์ ์์น ์ํจ๋ค.
์ฃผ์ํ ์
Custom Hook์ ์ฌ์ฉํ๋ค๊ณ ํด์ ๋ ๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ state๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์๋๋ค.
๊ทธ์ ๋ก์ง๋ง ๊ณต์ ํ ๋ฟ, state๋ ์ปดํฌ๋ํธ ๋ด์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ ๋์ด ์๋ค.
Custom Hook ์์
1. ์ฌ๋ฌ url์ fetchํ ๋ ์ธ ์ ์๋ Hook
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;
2. ์ฌ๋ฌ input์ ์ํ ์ํ ๋ณ๊ฒฝ์ ํ ๋ ์ธ ์ ์๋ Hooks
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;