
๋ชฉ์ฐจ
1. React Hook
2. custom Hook
1. React Hook
๐กHook์ด๋?
Hook์ React์ ํจ์ ์ปดํฌ๋ํธ์์ ์ํ๊ด๋ฆฌ์ ์๋ช
์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ํจ์.
๊ธฐ์กด์๋ ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ๊ฐ๋ฅํ๋ ๊ธฐ๋ฅ๋ค์ ํจ์ํ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ค ๋ฆฌ์กํธ์ ํต์ฌ ๊ธฐ๋ฅ์ด๋ค.
Hook์ React 16.8์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ฉฐ,
Hook์ class๋ฅผ ์์ฑํ์ง ์๊ณ ๋ state์ ๋ค๋ฅธ React์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค๊ณ ํ๋ค.
โ๏ธ ๋ํ์ ์ธ Hook ์ข
๋ฅ
- useState: ์ปดํฌ๋ํธ์ ์ํ๊ฐ(state)์ ์ ์ฅํ๊ณ ๋ณ๊ฒฝ
- useEffect: ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ (๋ง์ดํธ, ์ ๋ฐ์ดํธ, ์ธ๋ง์ดํธ ๋ฑ)
- useRef, useContext, useReducer, useMemo, useCallback ๋ฑ ๋ค์ํ ๋ด์ฅ ํ ์ ๊ณต
โ๏ธ Hook tip
- Hook์ ํจ์ ์ปดํฌ๋ํธ๋ ์ปค์คํ
ํ
๋ด๋ถ์์๋ง ํธ์ถํ ์ ์๋ค.
โ ์ผ๋ฐ ํจ์๋ if ๋ฌธ ์์์๋ ์ฌ์ฉํ ์ ์๋ค. - ์กฐ๊ฑด๋ถ๋ก Hook์ ํธ์ถํด์๋ ์ ๋๋ค.
โ ๋ชจ๋ ๋ ๋๋ง์์ ๋์ผํ ์์๋ก ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ - ๋๋ง์ Hook(Custom Hook)์ ๋ง๋ค ์ ์๋ค.
โ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ง์ ํ ํํ๋ก ๋ถ๋ฆฌํ ์ ์๋ค.
โ ํจ์ ์ด๋ฆ์ use๋ก ์์ํด์ผ ํจ (์: useInput)
2. Custom Hook
โ๏ธCustom Hook
๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์
๋ ฅ์ํ ๋ก์ง์ด ์๋ค๋ฉด, ์ปค์คํ
ํ
์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํ๋ค.
๐ก
1. ์ปค์คํ
ํ
๋ง๋๋ ๋ฒ โ ํจ์ ์์ use๋ฅผ ๋ถ์ธ๋ค.
ex) useInput()
2. ์ด๋๋ก ๋ถ๋ฆฌ?
: components ๊ฐ ์๋, 'hooks'ํด๋ ์์ฑ ํ ํจ์ ์ด๋ฆ์ .jsxํ์ผ์ ๋ง๋ค์ด ๋ถ๋ฆฌ์ํด.
// useInput.js (hooks ํด๋์ ์ ์ฅ)
import { useState } from "react";
function useInput() {
const [input, setInput] = useState("");
const onChange = (e) => {
setInput(e.target.value);
};
return [input, onChange];
}
export default useInput;
โ ์
๋ ฅ ๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํ useState ์ํ๋ฅผ ๋ด๋ถ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ,
input๊ฐ๊ณผ ์ด๋ฅผ ์
๋ฐ์ดํธํ๋ onChangeํจ์๋ฅผ ๋ฆฌํดํด์ค๋ค.
๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์์ useInput.jsx๋ฅผ ํธ์ถํ๋ฉด input์ํ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
// HookExam.jsx (์ปดํฌ๋ํธ์์ ์ฌ์ฉ)
import useInput from "../hooks/useInput";
const HookExam = () => {
const [input, onChange] = useInput();
return (
<div>
<input value={input} onChange={onChange} />
<p>์
๋ ฅํ ๊ฐ: {input}</p>
</div>
);
};
export default HookExam;
โ useInput()์ ํตํด input๊ณผ onChange๋ฅผ ๋ฐ์์ด.
โ <input/> ์ปดํฌ๋ํธ์ ๊ฐ์ ์ฐ๊ฒฐํ์ฌ ์
๋ ฅ ์ด๋ฒคํธ์ ๋ฐ๋ผ ๊ฐ์ ๋ณ๊ฒฝ์ํด.
โ useInput.jsx์์ useState๋ฅผ import ํจ์ผ๋ก, useInput.jsx๋ฅผ import ํด์ ์ฌ์ฉํ๋ HookExam.jsx๋ ์ด๋ฅผ import ํ ํ์ ์๋ค.
โ๏ธ์ปค์คํ
ํ
์ ์ฅ์
- ๋ก์ง ์ฌ์ฌ์ฉ: ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ํ๋์ ํจ์๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ์ปดํฌ๋ํธ ๋ถ๋ฆฌ: UI์ ๋ก์ง์ด ๊น๋ํ๊ฒ ๋ถ๋ฆฌ๋จ
- ํ ์คํธ ํธ๋ฆฌ: ํ ๋ง ๋ฐ๋ก ํ ์คํธํ๊ฑฐ๋ ๋๋ฒ๊น ๊ฐ๋ฅ
๐ก ์ ๋ฆฌ
Hook | ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํ๋ ๊ธฐ๋ฅ์ ๋ค๋ฃฐ ์ ์๋๋ก ํจ |
useState | ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ Hook, ์ํ๊ฐ์ ๋ง๋ค๊ณ ๊ด๋ฆฌ |
Custom Hook | ํ ์ ์ง์ ๋ง๋ค์ด์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ ํจ์, use๋ก ์์ํด์ผ ํจ |
์ฃผ์์ฌํญ | ๋ฐ๋์ ํจ์ ์ปดํฌ๋ํธ/์ปค์คํ ํ ๋ด๋ถ์์, ์กฐ๊ฑด๋ฌธ ์์ด ์ฌ์ฉํด์ผ ํจ |
*Ref
https://ko.legacy.reactjs.org/docs/hooks-overview.html
Hook ๊ฐ์ โ React
A JavaScript library for building user interfaces
ko.legacy.reactjs.org
์ค๋ช
์ด ๋ถ์กฑํ ๋ถ๋ถ์ด๋ ํผ๋๋ฐฑ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค โบ๏ธ
'โ๏ธFrontend > REACT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] useEffect (๋ผ์ดํ์ฌ์ดํด, Dependency array) (2) | 2025.05.22 |
---|---|
[React] Props ์ ๋ฌ ์ {} ์ฌ์ฉํ๋ ์ด์ / map() ํจ์ (5) | 2025.05.19 |
[React] useState์ useRef (2) | 2025.05.10 |
[React] JSX ๋? (ํน์ง, CSS์ ์ฉ, className) (4) | 2025.05.08 |
[React] ๋ฆฌ์กํธ์ ๊ฐ์๋(virtualDOM) / ํฐ๋ฏธ๋ ์ด๊ธฐ ์ค์ (2) | 2025.03.23 |