๊ฐ๋ฐ์๊ฐ ์ค์ค๋ก ์ปค์คํ
ํ ํ
์ ์๋ฏธํ๋ฉฐ,
๋ฐ๋ณต๋๋ ๋ก์ง์ ํจ์๋ก ๋ฝ์๋ด์ด ์ฌ์ฌ์ฉํ ์ ์๋ค.
์ฌ๋ฌ url์ fetchํ ๋, ์ฌ๋ฌ input์ ์ํ ์ํ ๋ณ๊ฒฝ ๋ฑ
๋ฐ๋ณต๋๋ ๋ก์ง์ ๋์ผํ ํจ์์์ ์๋ํ๊ฒ ํ๊ณ ์ถ์ ๋
์ปค์คํ
ํ
์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
โ๏ธCustom Hooks์ ํน์ง๋ค
โ ๊ทธ์ ๋ก์ง๋ง ๊ณต์ ํ ๋ฟ, state๋ ์ปดํฌ๋ํธ ๋ด์์ ๋
๋ฆฝ์ ์ผ๋ก ์ ์๋์ด ์๋ค.
โ Custom Hook์ ์ ์ํ ๋๋ ํจ์ ์ด๋ฆ ์์ use๋ฅผ ๋ถ์ฌ์ผ ํ๋ค.
โ ์ผ๋ฐ ํจ์์๋ ๋ค๋ฅด๊ฒ React ๋ด์ฅ hook์ ์ฌ์ฉํ ์ ์๋ค.
โ ๋๋ถ๋ถ hooks ๋๋ ํ ๋ฆฌ์ Custom Hook์ ์์น์ํจ๋ค.
โ return ํ๋ ๊ฐ์ด ์กฐ๊ฑด๋ถ์ฌ์๋ ์๋๋ค.
๐๋ก์ปฌ ์คํ ๋ฆฌ์ง ์ฌ์ฉํ๊ธฐ์์ ์ปค์คํ ํ ์ ์ฌ์ฉํ ์์๋ฅผ ๋ณด๊ณ ์ค์.
โ ์ฌ๋ฌ url์ fetchํ ๋ ์ธ ์ ์๋ useFetch 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;
โ ์ฌ๋ฌ input์ ์ํ ์ํ ๋ณ๊ฒฝ์ ํ ๋ ์ธ ์ ์๋ useInputs 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;