[React] ๐Ÿ“–Custom Hooks

TATAยท2023๋…„ 3์›” 22์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
20/32

โ–ท Custom Hooks

๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค์Šค๋กœ ์ปค์Šคํ…€ํ•œ ํ›…์„ ์˜๋ฏธํ•˜๋ฉฐ,
๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ํ•จ์ˆ˜๋กœ ๋ฝ‘์•„๋‚ด์–ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋Ÿฌ url์„ fetchํ•  ๋•Œ, ์—ฌ๋Ÿฌ input์— ์˜ํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ๋“ฑ
๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ๋™์ผํ•œ ํ•จ์ˆ˜์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
์ปค์Šคํ…€ ํ›…์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

โ—๏ธCustom Hooks์˜ ํŠน์ง•๋“ค
โˆ’ ๊ทธ์ € ๋กœ์ง๋งŒ ๊ณต์œ ํ•  ๋ฟ, state๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค.
โˆ’ Custom Hook์„ ์ •์˜ํ•  ๋•Œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„ ์•ž์— use๋ฅผ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.
โˆ’ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€๋Š” ๋‹ค๋ฅด๊ฒŒ React ๋‚ด์žฅ hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โˆ’ ๋Œ€๋ถ€๋ถ„ hooks ๋””๋ ‰ํ† ๋ฆฌ์— Custom Hook์„ ์œ„์น˜์‹œํ‚จ๋‹ค.
โˆ’ return ํ•˜๋Š” ๊ฐ’์ด ์กฐ๊ฑด๋ถ€์—ฌ์„œ๋Š” ์•ˆ๋œ๋‹ค.

๐Ÿ“˜๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ์—์„œ ์ปค์Šคํ…€ ํ›…์„ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ๋ฅผ ๋ณด๊ณ  ์˜ค์ž.


๐Ÿ“– Custom Hook์˜ ์˜ˆ์‹œ

โˆ’ ์—ฌ๋Ÿฌ 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;

profile
๐Ÿพ

0๊ฐœ์˜ ๋Œ“๊ธ€