์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ(State)ํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ํธ์์ฉ(Effect)์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
useState ๋ํ State Hook์ด๋ค.
๊ธฐ์กด์๋ ์ปดํฌ๋ํธ ๋ด์์ State์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด, ๋ฐ๋์ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ผ๋, ๊ฐ๋ฐ์๊ฐ ๋๋ผ๊ธฐ์ ๋ณต์กํ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ํ๊ณ ํจ์ ์ปดํฌ๋ํธ์์ ํด๋์ค ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด React 16.8 ๋ฒ์ ์ ์ถ๊ฐ๋์๋ค.
const App = () => {
const [username, setUsername] = useState('');
return (
<div>
<h1>{username}๋ ์ด์์ค์ธ์.</h1>
</div>
);
};
- Hook์ React ํจ์ (์ปดํฌ๋ํธ, Hook) ๋ด์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- Hook์ ์ด๋ฆ์ ๋ฐ๋์ 'use'๋ก ์์ํด์ผ ํ๋ค.
- ์ต์์ Level์์๋ง Hook์ ํธ์ถํ ์ ์๋ค (if๋ฌธ ํน์ for๋ฌธ, ์ฝ๋ฐฑํจ์ ๋ด์์ ํธ์ถ ๊ธ์ง)
const App = () => {
//์ผ๋ฐ์ ์ธ useState ์ฌ์ฉ๋ฒ
const [state์ด๋ฆ, setState์ด๋ฆ] = useState(์ด๊ธฐ๊ฐ)
// Array๊ฐ ๋ฐํ๋๊ณ , 0๋ฒ์งธ ๊ฐ์ ํ์ฌ๊ฐ, 1๋ฒ์งธ๋ ๊ฐ์ ๋ฐ๊พธ๊ธฐ ์ํ ๋๋ค๋ฅธ ํจ์
// ์ฆ, Hooks๋ ํจ์ ์ชผ๊ฐ๋ฆฌ์ด๋ค.
}
const App = () => { const[title, setTitle] = useState(''); // State๋ฅผ ๋ณ๊ฒฝํ ๊ฐ์ ์ง์ ์ ๋ ฅํ๋ ๋ฐฉ๋ฒ setTitle('Hello'); //ํ์ฌ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ํจ์ ์ ์ธ -> return ๊ฐ์ด state์ ๋ฐ์ setTitle((current)=>{ return current + 'world'l }) }
- state๋ฅผ ๋ณ๊ฒฝํ ๋๋ setStateํจ์์ ์ง์ ๊ฐ์ ๋๊ฒจ์ฃผ๊ฑฐ๋,
- ํ์ฌ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ํจ์๋ฅผ ์ ๋ฌํ๋ค. ์ด ํจ์์์ return ๋๋ ๊ฐ์ด state์ ๋ฐ์๋๋ค.
const App = () => {
useEffect(EffectCallback, Deps?)
}
const App = () => {
const [count, setCount] = useState(0)
useEffect(() => {
console.log(`๋ฒํผ์ ${count}ํ ํด๋ฆญํ์ต๋๋ค.`)
}, [count])
return (
<div>
<button onClick={()=> setCount(count + 1)}>
ํด๋ฆญํ์ธ์
</button>
</div>
);
}
const App = () => {
useEffect(()=>{
//state๊ฐ ๋ณ๊ฒฝ ๋ ๋, ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ ์คํ
const intervalId = setInterval(()=>{
console.log('์๋
ํ์ธ์');
},1000);
// ์ปดํฌ๋ํธ๋ฅผ ์ฌ ๋ ๋๋ง ํ๊ธฐ ์ ์, ์ปดํฌ๋ํธ๊ฐ ์์ด์ง ๋ ์คํ
return () => {
clearInterval(intervalId);
}
}, []) // ์๋๋ผ๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ์ด ๋ ๋ ํ๋ฒ ์คํ๋๊ธฐ ๋๋ฌธ์
//์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋, ํ๋ฒ๋ง ์คํํ๋ผ๋ ์๋ฏธ
}
useEffect์ ์ดํํธ ํจ์ ๋ด์์ ๋ค๋ฅธ ํจ์๋ฅผ returnํ ๊ฒฝ์ฐ state๊ฐ ๋ณ๊ฒฝ๋์ด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๊ธฐ ์ ๊ณผ ์ปดํฌ๋ํธ๊ฐ ์์ด์ง ๋ (Destroy) ํธ์ถํ ํจ์๋ฅผ ์ง์ ํ๋ค.
useMemo
const momoizedValue = useMemo(()=> computeExpensiveValue(a,b), [a,b])
const App = () => { const [firstName, setFirstName] = useState('Alex'); const [lastName, setLastName] = useState('Yoo'); //์ด๋ฆ๊ณผ ์ฑ์ด ๋ฐ๋ ๋๋ง๋ค ํ๋ค์์ ๋ฉ๋ชจ์ด์ ์ด์ ํจ const fullName = useMemo(()=> { return `${firstName} ${lastName}`; }, [firstName, lastName]) }
- ์ง์ ํ State๋ Props๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ํ์ฉํด ๊ณ์ฐ๋ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ์ฌ๋ ๋๋ง ์ ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ธ๋ค.
- useMemo์ ์ฐ์ฐ์ ๋ ๋๋ง ๋จ๊ณ์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋ก์ง์ ์์ฑํ์ง ์๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
useCallbak
const momoizedCallback = useCallback( () => { doSomething(a,b); }, [a,b], );
const App = () => { const [firstName, setFirstName] = useState('Alex'); const [lastName, setLastName] = useState('Yoo'); //์ด๋ฆ๊ณผ ์ฑ์ด ๋ฐ๋ ๋๋ง๋ค ํ๋ค์์ returnํ๋ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ const getfullName = useCallback(()=> { return `${firstName} ${lastName}`; }, [firstName, lastName]) return <>{getFullName()}</> }
- ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ Hook. ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋ ๋ ๋ถํ์ํ๊ฒ ํจ์๊ฐ ๋ค์ ์์ฑ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
- useMemo(()=> fn, deps) === useCallback(fn, deps)
useRef
const refContainer = useRef(initialValue);
const App = () => { const inputRef = useRef(null) const onButtonClick = () => { inputRef.current.focus(); } return ( <div> <input ref={inputRef} type='text'/> <button onClick={onButtonClick}> input์ผ๋ก ํฌ์ปค์ค </button> </div> ); };
- ์ปดํฌ๋ํธ ์์ ์ฃผ๊ธฐ ๋ด์์ ์ ์งํ ref ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
- ref ๊ฐ์ฒด๋ .current๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ , ๊ทธ ๊ฐ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
- ์ผ๋ฐ์ ์ผ๋ก React์์ DOM Element์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ค.
- useRef์ ์ํด ๋ฐํ๋ ref ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋์ง ์๋๋ค.
์ฌ์ฉ์ ์์์ Hook์ ๋ง๋ค๋ฉด ์ปดํฌ๋ํธ ๋ก์ง์ ํจ์๋ก ๋ฝ์๋ด์ด ์ฌ์ฌ์ฉํ ์ ์๋ค.
UI ์์์ ์ฌ์ฌ์ฉ์ฑ์ ์ฌ๋ฆฌ๊ธฐ ์ํด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฒ ์ฒ๋ผ, ๋ก์ง์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด์๋ Custom Hook์ ์ ์ํ๋ค.
function useMyHook(args){ const [status, setStatus] = useState(null); // custom logic return status; }
- ํ ๋ก์ง์ด ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ํจ์๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ Hook์ ๋ง๋๋ ๊ฐ๋ ์ด๋ค.
- Hook์ ์ด๋ฆ์ 'use'๋ก ์์ํด์ผ ์ปจ๋ฒค์ ์ ๋ง๋ค.
- ํ Hook ๋ด์ state๋ ๊ณต์ ๋์ง ์๋๋ค.
ํ์ค ํ: ๋ฆฌ์กํธ ์ต์ ๋ฌธ๋ฒ์์ ์ค์ํ ๋ถ๋ถ์ธ React Hooks ์ ๊ฐ๋ ๊ณผ ์ข ๋ฅ์ ๋ํด ๋ฐฐ์ ๊ณ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ด ์ต์ํด์ง๋ ์ ์ตํ ์๊ฐ.