๋ด์ฅ React Hook
Hook์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ์์ ๋ค์ํ React ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ด์ฅ๋ Hook์ ์ด์ฉํ๊ฑฐ๋ ์ด๋ฅผ ๊ฒฐํฉํ์ฌ ์์ ๋ง์ Hook์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ํ์ด์ง์๋ React์ ๋ด์ฅ๋ ๋ชจ๋ Hook์ด ๋์ด๋์ด ์์ต๋๋ค.
State Hooks
State๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ โ๊ธฐ์ตโํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํผ ์ปดํฌ๋ํธ๋ State๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๊ฐ์ ์ ์ฅํ ์ ์๊ณ , ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ ์ปดํฌ๋ํธ๋ State๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ์ด๋ฏธ์ง ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ์ State๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด, ๋ค์ Hook ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ธ์.
useState
๋ ์ง์ ์ ๋ฐ์ดํธํ ์ ์๋ State ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค.useReducer
๋ Reducer ํจ์ ๋ด๋ถ์ ์ ๋ฐ์ดํธ ๋ก์ง์ ์ฌ์ฉํ์ฌ State ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค.
function ImageGallery() {
const [index, setIndex] = useState(0);
// ...
Context Hooks
Context๋ ์ปดํฌ๋ํธ๊ฐ Props๋ฅผ ์ ๋ฌํ์ง ์๊ณ ๋ ๋ฉ๋ฆฌ ์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๊ฒ ํด์ค๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์์ ์ปดํฌ๋ํธ๋ ํ์ฌ UI ํ ๋ง๋ฅผ ์๋์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๊น์ด์ ์๊ด์์ด ์ ๋ฌํ ์ ์์ต๋๋ค.
useContext
๋ Context๋ฅผ ์ฝ๊ณ ๊ตฌ๋ ํฉ๋๋ค.
function Button() {
const theme = useContext(ThemeContext);
// ...
Ref Hooks
Ref๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ DOM ๋ ธ๋๋ Timeout ID์ ๊ฐ์ด ๋ ๋๋ง์ ์ฌ์ฉ๋์ง ์๋ ์ผ๋ถ ์ ๋ณด๋ฅผ ๋ณด์ ํ ์ ์์ต๋๋ค. State์ ๋ฌ๋ฆฌ, Ref๋ ์ ๋ฐ์ดํธ๋ฅผ ํด๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋์ง ์์ต๋๋ค. Ref๋ React ํจ๋ฌ๋ค์์ โํ์ถ๊ตฌโ์ ๋๋ค. ๋ด์ฅ๋ ๋ธ๋ผ์ฐ์ API์ ๊ฐ์ด, React๊ฐ ์๋ ์์คํ ์ผ๋ก ์์ ํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
useRef
๋ Ref๋ฅผ ์ ์ธํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ค ๊ฐ์ด๋ผ๋ ๋ด์ ์ ์์ง๋ง, ๋๋ถ๋ถ DOM ๋ ธ๋๋ฅผ ๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.useImperativeHandle
์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ๋ ธ์ถ๋๋ Ref๋ฅผ ์ปค์คํ ํ ์ ์์ต๋๋ค. ์ด๋ ๋๋ฌผ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
function Form() {
const inputRef = useRef(null);
// ...
Effect Hooks
Effect๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ฅผ ์ธ๋ถ ์์คํ ์ ์ฐ๊ฒฐํ๊ณ ๋๊ธฐํํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋คํธ์ํฌ, ๋ธ๋ผ์ฐ์ DOM, ์ ๋๋ฉ์ด์ , ๋ค๋ฅธ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์์ ฏ, ๊ธฐํ React๊ฐ ์๋ ์ฝ๋๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
useEffect
๋ ์ปดํฌ๋ํธ๋ฅผ ์ธ๋ถ ์์คํ ์ ์ฐ๊ฒฐํฉ๋๋ค.
function ChatRoom({ roomId }) {
useEffect(() => {
const connection = createConnection(roomId);
connection.connect();
return () => connection.disconnect();
}, [roomId]);
// ...
Effect๋ React ํจ๋ฌ๋ค์์ โํ์ถ๊ตฌโ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์กฐ์ ํ๊ธฐ ์ํด Effect๋ฅผ ์ฐ์ง ๋ง์ธ์. ์ธ๋ถ ์์คํ ๊ณผ ์ํธ์์ฉํ์ง ์๋๋ค๋ฉด, Effect๊ฐ ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค.
ํ์ด๋ฐ์์ ์ฐจ์ด๊ฐ ์๋ useEffect
์ ๋ ๊ฐ์ง ๋๋ฌผ๊ฒ ์ฌ์ฉ๋๋ ๋ณํ์ด ์์ต๋๋ค.
useLayoutEffect
๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ์คํ๋ฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ ์ด์์์ ๊ณ์ฐํ ์ ์์ต๋๋ค.useInsertionEffect
๋ React๊ฐ DOM์ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์คํ๋ฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๊ธฐ์ ๋์ CSS๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
Performance Hooks
์ฌ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ถํ์ํ ์์ ์ ๊ฑด๋๋ฐ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ๋ ๋๋ง ์ดํ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์บ์๋ ๊ณ์ฐ์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๋ ๋๋ง์ ๊ฑด๋๋ฐ๋๋ก React์ ์ง์ํ ์ ์์ต๋๋ค.
๊ณ์ฐ๊ณผ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๊ฑด๋๋ฐ๋ ค๋ฉด ๋ค์ Hook ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ธ์.
useMemo
๋ฅผ ์ฌ์ฉํ๋ฉด ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ ์ ์์ต๋๋ค.useCallback
์ ์ฌ์ฉํ๋ฉด ํจ์ ์ ์๋ฅผ ์ต์ ํ๋ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๊ธฐ ์ ์ ์บ์ํ ์ ์์ต๋๋ค.
function TodoList({ todos, tab, theme }) {
const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]);
// ...
}
ํ๋ฉด์ ์ค์ ๋ก ์ ๋ฐ์ดํธํด์ผ ํ๋ฏ๋ก ์ฌ๋ ๋๋ง์ ๊ฑด๋๋ธ ์ ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋๊ธฐ์์ด์ด์ผ ํ๋ Blocking ์ ๋ฐ์ดํธ(์: Input์ ์ ๋ ฅ)์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ฐจ๋จํ ํ์๊ฐ ์๋ Non-Blocking ์ ๋ฐ์ดํธ(์: ์ฐจํธ ์ ๋ฐ์ดํธ)๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ ๋๋ง ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ค๋ฉด, ๋ค์ Hook ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ธ์.
useTransition
์ ์ฌ์ฉํ๋ฉด State ์ ํ์ Non-Blocking์ผ๋ก ํ์ํ๊ณ , ๋ค๋ฅธ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฅผ ์ค๋จํ๋๋ก ํ์ฉํ ์ ์์ต๋๋ค.useDeferredValue
๋ฅผ ์ฌ์ฉํ๋ฉด UI์ ์ค์ํ์ง ์์ ๋ถ๋ถ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐํ๊ณ , ๋ค๋ฅธ ๋ถ๋ถ์ด ๋จผ์ ์ ๋ฐ์ดํธ๋๋๋ก ํ ์ ์์ต๋๋ค.
Other Hooks
๋ค์ Hook์ ๋๋ถ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์๊ฒ ์ ์ฉํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค.
useDebugValue
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปค์คํ Hook์ ๋ํด React ๊ฐ๋ฐ์ ๋๊ตฌ์ ํ์ํ๋ ๋ ์ด๋ธ์ ์ปค์คํ ํ ์ ์์ต๋๋ค.useId
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๊ณ ์ ID๋ฅผ ์์ ๊ณผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๊ทผ์ฑ API์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.useSyncExternalStore
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ ์ ์ฅ์๋ฅผ ๊ตฌ๋ ํ ์ ์์ต๋๋ค.
useActionState
๋ฅผ ์ฌ์ฉํ๋ฉด ์ก์ ์ ํตํด State๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋๋ง์ Hooks
๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ก ๋๋ง์ ์ปค์คํ Hook์ ์ ์ํ ์๋ ์์ต๋๋ค.