Search

์ฃผ์š” hook

React Hooks๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ๊ฐ€๋Šฅํ–ˆ๋˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ํ‘œ๋Š” React์˜ ์ฃผ์š” Hook๋“ค๊ณผ ๊ทธ ์‚ฌ์šฉ๋ฒ•์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ Hook์€ ํŠน์ •ํ•œ ์šฉ๋„๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์ปดํฌ๋„ŒํŠธ์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ์™€ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ ์ ˆํžˆ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Hook ์ด๋ฆ„
์„ค๋ช…
์‚ฌ์šฉ ์˜ˆ์ œ
useState
์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.
const [count, setCount] = useState(0);
useEffect
์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ. (๋ Œ๋”๋ง ํ›„, ์˜์กด์„ฑ ๋ณ€ํ™” ์‹œ ์‹คํ–‰)
useEffect(() => { console.log(count); }, [count]);
useContext
Context API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ.
const value = useContext(MyContext);
useReducer
๋ณต์žกํ•œ ์ƒํƒœ ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Hook.
const [state, dispatch] = useReducer(reducer, initialState);
useRef
DOM ์š”์†Œ๋‚˜ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ. ๊ฐ’์€ ๋ Œ๋”๋ง ๊ฐ„์— ์œ ์ง€๋จ.
const inputRef = useRef(null);
useMemo
๊ฐ’์˜ ์žฌ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์บ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
useCallback
ํ•จ์ˆ˜์˜ ์žฌ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.
const memoizedCallback = useCallback(() => { doSomething(); }, [dependency]);
useLayoutEffect
DOM ๋ณ€ํ™”๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ useEffect๋ณด๋‹ค ๋นจ๋ฆฌ ์‹คํ–‰๋จ.
useLayoutEffect(() => { console.log('DOM ๋ณ€๊ฒฝ๋จ'); });
useImperativeHandle
๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ref๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ.
useImperativeHandle(ref, () => ({ customMethod: () => { ... } }));
useDebugValue
React ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— Hook์˜ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.
useDebugValue(someValue, formatValue);
useTransition
UI ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐ ์‚ฌ์šฉ (React 18+).
const [isPending, startTransition] = useTransition();
useDeferredValue
๊ฐ’ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์—ฐ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„  (React 18+).
const deferredValue = useDeferredValue(value);
useId
๊ณ ์œ  ID๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ ‘๊ทผ์„ฑ ์†์„ฑ์— ํ™œ์šฉ (React 18+).
const id = useId();
useSyncExternalStore
์™ธ๋ถ€ ์Šคํ† ์–ด์™€ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌ (React 18+).
const state = useSyncExternalStore(subscribe, getSnapshot);