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); |