728x90
๐ useCounter() Custom Hook ๋ง๋ค๊ธฐ
- useCounter Hook์ ์ด๊ธฐ ์นด์ด๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ ์นด์ดํธ๋ผ๋ ์ด๋ฆ์ state๋ฅผ ์์ฑํ์ฌ ๊ฐ์ ์ ๊ณตํ๊ณ ์นด์ดํธ ์ฆ๊ฐ ๋ฐ ๊ฐ์๋ฅผ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ก ํจ์๋ฅผ ์ ๊ณตํ๋ Hook
- useCounter Hook์ ์ฌ์ฉํ๋ฉด ์ด๋ค ํจ์ ์ปดํฌ๋ํธ์์๋ ์ง ์นด์ดํธ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
๐ Accommodate Component ๋ง๋ค๊ธฐ
- Accommodate ์ปดํฌ๋ํธ๋ useCount ํ ์ ์ฌ์ฉํ์ฌ ์นด์ดํธ๋ฅผ ๊ด๋ฆฌ
- ์ต๋ ์นด์ดํธ ๊ฐ์๋ maxCapacity๋ผ๋ ์ด๋ฆ์ ์์๋ก ์ ์๋์ด ์๊ณ ์นด์ดํธ ๊ฐ์๊ฐ ์ต๋ ์ฉ๋์ ์ด๊ณผํ๋ฉด ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ํ์๋๋ฉฐ ๋ ์ด์ ์ ์ฅ์ด ๋ถ๊ฐ๋ฅ
- useEffect ํ ์ ์๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ผ๋ถ๋ฌ ๋ ๊ฐ์ useEffect ํ ์ ์ฌ์ฉ
- ํ๋๋ ์์กด์ฑ ๋ฐฐ์ด์ด ์๋ ํํ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์๋ ํํ
- ์์กด์ฑ ๋ฐฐ์ด์ด ์๋ useEffectHook์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ์งํ์ ํธ์ถ๋๋ฉฐ ์ดํ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ํธ์ถ
- ์์กด์ฑ ๋ฐฐ์ด์ด ์๋ useEffectHook์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ์งํ์ ํธ์ถ๋๋ฉฐ ์ดํ ์นด์ดํธ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ํธ์ถ๋๋๋ฐ ์ด๋ ์ฉ๋์ด ๊ฐ๋ ์ฐผ๋์ง ์๋์ง์ ์ํ๋ฅผ isFull์ด๋ผ๋ ์คํ ์ดํธ์ ์ ์ฅ
- ์์กด์ฑ์ด ์๋ ๋ฐฐ์ด์ด useEffect ํ ์ด ํธ์ถ๋ ์ด์ ๋ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์
- ์์กด์ฑ ๋ฐฐ์ด์ด ์๋ useEffect ํ ์ด ํธ์ถ๋ ์ด์ ๋ ์นด์ดํธ ๊ฐ์ด ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์
- ์ ์์ด ๊ฐ๋ ์ฐจ๋ฉด isFull์ ๊ฐ์ด true๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ ์ฅ ๋ฒํผ์ด ๋นํ์ฑํ๋์ด ๋ ์ด์ ๋๋ฅผ ์ ์๊ฒ ๋๊ณ ๋นจ๊ฐ ๊ธ์จ๋ก ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ
- ๋ก๊ทธ์์ ์นด์ดํธ ๊ฐ์ด 10์ด ๋ ์ดํ์ ๋ ์ด์ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ์นด์ดํธ๋ฅผ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ๊ณ ์๋ useEffectHook์ ํธ์ถ๋์ง ์๋ ๊ฒ์ ๋ณผ ์ ์์
- useCounterHook์์ Math.max ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์นด์ดํธ ๊ฐ์ด 0 ์๋๋ก ๋ด๋ ค๊ฐ ์ ์๊ฒ ๋ง๋ค์ด๋จ๊ธฐ ๋๋ฌธ์ ๊ฐ์ด 0์ด ๋๋ฉด ๋ ์ด์ useEffect Hook๋ ํธ์ถ๋์ง ์์
๐ Hooks
- Hook์ ์ฌ์ฉํ๋ฉด ํจ์ ์ปดํฌ๋ํธ๋ ํด๋์ค ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋์ผํ๊ฒ ๊ตฌํํ ์ ์์
- ์๋ ์กด์ฌํ๋ ์ด๋ค ๊ธฐ๋ฅ์ ๊ฐ๊ณ ๋ฆฌ๋ฅผ ๊ฑฐ๋ ๊ฒ์ฒ๋ผ ๋ผ์ด ๋ค์ด๊ฐ ๊ฐ์ด ์ํ๋๋ ๊ฒ์ ์๋ฏธ
- React์ state์ ์๋ช ์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ๋ฆฌ๋ฅผ ๊ฑธ์ด ์ํ๋ ์์ ์ ์ ํด์ง ํจ์๋ฅผ ์คํ๋๋๋ก ๋ง๋ ๊ฒ
- ์คํ๋๋ ํจ์๋ฅผ hook์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ก ์ ํจ
- hook์ ์ด๋ฆ์ use๋ก ์์
- hook์ด ์ํํ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ด๋ฆ์ ์ง๊ฒ ๋์๋๋ฐ ๊ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ๋ก use๋ฅผ ๋ถ์
- ๊ฐ๋ฐ์๊ฐ ์ง์ ์ปค์คํ ํ ์ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋๋ฐ ์ปค์คํ ํน์ ๊ฐ๋ฐ์ ๋ง์๋๋ก ์ด๋ฆ์ ์ง์ ์ ์์ง๋ง ๋ค์์ ๋ฐฐ์ธ ํ ์ ๊ท์น์ ๋ฐ๋ผ ์ด๋ฆ ์์ use๋ฅผ ๋ถ์ฌ์ ํ ์ด๋ผ๋ ๊ฒ์ ๋ํ๋ด ์ฃผ์ด์ผ ํจ
- state๋ฅผ ์ด์ฉํ์ฌ ๋ ๋๋ง์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
๐ useState()
- state๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ hook
- ํจ์ ์ปดํฌ๋ํธ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก state๋ผ๋ ๊ฒ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ class ์ปดํฌ๋ํธ์ฒ๋ผ state๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด useState hook๋ฅผ ์ฌ์ฉํด์ผ ํจ
import React, {useState} from "react";
function Counter(props) {
var count = 0;
return (
<div>
<p>์ด {count}๋ฒ ํด๋ฆญํ์ต๋๋ค.</p>
<button onClick={() => count++}>
ํด๋ฆญ
</button>
</div>
);
}
- ์นด์ดํฐ ์ปดํฌ๋ํธ๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์นด์ดํธ๋ฅผ ํ๋์ฉ ์ฆ๊ฐ์ํค๊ณ ํ์ฌ ์นด์ดํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋จ์ํ ์ปดํฌ๋ํธ
- ์นด์ดํฐ๋ฅผ ํจ์์ ๋ณ์๋ก ์ ์ธํด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฒํผ ํด๋ฆญ ์ ์นด์ดํธ ๊ฐ์ ์ฆ๊ฐ์ํฌ ์๋ ์์ง๋ง ์ฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์์ ์๋ก์ด ์นด์ดํฐ ๊ฐ์ด ํ๋ฉด์ ํ์๋์ง ์๊ฒ ๋จ
- state๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ์ฌ๋ ๋๋ง ๋๋๋ก ํด์ผ ํ๋๋ฐ ํจ์ ์ปดํฌ๋ํธ์๋ ํด๋น ๊ธฐ๋ฅ์ด ๋ฐ๋ก ์๊ธฐ ๋๋ฌธ์ useState๋ฅผ ์ฌ์ฉํ์ฌ state๋ฅผ ์ ์ธํ๊ณ ์ ๋ฐ์ดํธํ์ฌ์ผ ํจ
const [๋ณ์๋ช
, setํจ์๋ช
] = useState(์ด๊ธฐ๊ฐ);
- useState๋ฅผ ๋ ธ์ถํ ๋์๋ ํ๋ผ๋ฏธํฐ๋ก ์ ์ธํ state์ ์ด๊ธฐ๊ฐ์ด ๋ค์ด๊ฐ
- ํด๋์ค ์ปดํฌ๋ํธ์ ์์ฑ์์์ state๋ฅผ ์ ์ธํ ๋ ์ด๊ธฐ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒ
- ์ด๊ธฐ๊ฐ์ ๋ฃ์ด useState๋ฅผ ๋ ธ์ถํ๋ฉด return ๊ฐ์ผ๋ก ๋ฐฐ์ด์ด ๋์ด
- return ๋ ๋ฐฐ์ด์๋ ๋ ๊ฐ์ง ํญ๋ชฉ์ด ์๋๋ฐ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ state๋ก ์ ์ธ๋ ๋ณ์์ด๊ณ ๋ ๋ฒ์งธ ํญ๋ชฉ์ ํด๋น state์ set ํจ์
import React, {useState} from "react";
function Counter(props) {
const [count, setCount] = useState(0);
return(
<div>
<p>์ด {count}๋ฒ ํด๋ฆญํ์ต๋๋ค/</p>
<button onClick={() => setCount(count + 1)}>
ํด๋ฆญ
</button>
</div>
);
};
- useState๋ฅผ ์ฌ์ฉํ์ฌ ์นด์ดํธ ๊ฐ์ state๋ก ๊ด๋ฆฌํ๋๋ก ๋ง๋ ๊ฒ
- state ๋ณ์๋ช ๊ณผ set ํจ์๊ฐ ๊ฐ๊ฐ count, setCount๋ก ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์
- ๋ฒํผ์ด ๋๋ ธ์ ๋ setCount ํจ์๋ฅผ ํธ์ถํด์ ์นด์ดํธ 1 ์ฆ๊ฐ
- ์นด์ดํธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ ๋ ๋๋ง ๋๋ฉด์ ํ๋ฉด์ ์๋ก์ด ์นด์ด๋ ๊ฐ์ด ํ์
- ํด๋์ค ์ปดํฌ๋ํธ์์ setState ํจ์๋ฅผ ํ์ถํ์ฌ state๊ฐ ์ ๋ฐ์ดํธ๋๊ณ ์ดํ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง ๋๋ ๊ณผ์ ๊ณผ ๋์ผ
- ํด๋์ค ์ปดํฌ๋ํธ์์๋ setState ํจ์ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ state ๊ฐ์ ์ ๋ฐ์ดํธํ ์ ์์์ง๋ง useState๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์๋ ๋ณ์ ๊ฐ๊ฐ์ ๋ํ set ํจ์๊ฐ ๋ฐ๋ก ์กด์ฌ
๐ useEffect()
- ์ฌ์ดํธ ์ดํํธ(side effec) t๋ฅผ ์ํํ๊ธฐ ์ํ Hook
- ์ฌ์ดํธ ์ดํํธ๋ ๋ถ์์ฉ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์
- ๊ฐ๋ฐ์๊ฐ ์๋์น ์์ ์ฝ๋๊ฐ ์คํ๋๋ฉด์ ๋ฒ๊ทธ๊ฐ ๋ํ๋๋ฉด side effect๊ฐ ๋ฐ์ํ๋ค๊ณ ๋งํจ
- ๋ฆฌ์กํธ์์ ๋งํ๋ side effect๋ ํจ๊ณผ ํน์ ์ํฅ์ ๋ปํ๋ ์๋ฏธ์ ๊ฐ๊น์
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ฑฐ๋ ์๋์ผ๋ก DOM์ ๋ณ๊ฒฝํ๋ ๋ฑ์ ์์ ์ ์๋ฏธ
- ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฉฐ. ๋ ๋๋ง ์ค์๋ ์์ ์ด ์๋ฃํ ์ ์๊ธฐ ๋๋ฌธ์
- useEffect๋ ๋ฆฌ์กํธ์ ํจ์ ์ปดํฌ๋ํธ์์ side effect๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ Hook
useEffect(์ดํํธ ํจ์, ์์กด์ฑ ๋ฐฐ์ด);
- ์์กด์ฑ ๋ฐฐ์ด์ ์์กดํ๊ณ ์๋ ๋ฐฐ์ด์ธ๋ฐ ๋ฐฐ์ด ์์ ์๋ ๋ณ์ ์ค์ ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ Effect ํจ์ ์คํ
- Effect ํจ์๋ ์ฒ์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ์ดํ์ ์ ๋ฐ์ดํธ๋ก ์ธํ ์ฌ๋ ๋๋ง ์ดํ์ ์คํ
useEffect(์ดํํธ ํจ์, []);
- ์ดํํธ ํจ์๊ฐ mount์ unmount์ ๋จ ํ ๋ฒ์ฉ๋ง ์คํ๋๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ๋น ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋จ
- ํด๋น ์ดํํธ๊ฐ props๋ state์ ์๋ ์ด๋ค ๊ฐ์๋ ์์กดํ์ง ์๋ ๊ฒ์ด ๋๋ฏ๋ก ์ฌ๋ฌ ๋ฒ ์คํ๋์ง ์์
useEffect(์ดํํธ ํจ์);
- ์์กด์ฑ ๋ฐฐ์ด์ ์๋ตํ ์ ์์ง๋ง ์๋ตํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ํธ์ถ
- ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง ๋ ๋๋ฅผ ํฌํจํด์ ๋งค๋ฒ ๋ ๋๋ง ๋ ๋๋ง๋ค Effect๊ฐ ์คํ
import React, {useState, useEffect} from "react";
function Counter(props) {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `you clicked ${count} times`;
});
return (
<div>
<p>์ด {count}๋ฒ ํด๋ฆญํ์ต๋๋ค.</p>
<button onClick={() => setCount(count + 1)}>
ํด๋ฆญ
</button>
</div>
);
}
- useEffect๋ฅผ ์ฌ์ฉํด์ ํด๋์ค ์ปดํฌ๋ํธ์์ ์ ๊ณตํ๋ componentDidMount, componentDidUpdate์ ๊ฐ์ ์๋ช ์ฃผ๊ธฐ ํจ์์ ๊ธฐ๋ฅ์ ๋์ผํ๊ฒ ์ํํ๋๋ก ๋ง๋ฆ
- useEffect ์์ ์๋ ์ดํํธ ํจ์์์๋ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API๋ฅผ ์ฌ์ฉํด์ ๋ํ๋จผํธ์ ํ์ดํ์ ์ ๋ฐ์ดํธ
- ๋ํ๋จผํธ์ ํ์ดํ์ ๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง๋ฅผ ์ด์์ ๋ ์ฐฝ์ ํ์๋๋ ๋ฌธ์์ด
- ์์กด์ฑ ๋ฐฐ์ด ์์ด useEffect๋ฅผ ์ฌ์ฉํ๋ฉด React๋ DOM์ด ๋ณ๊ฒฝ๋ ์ดํ์ ํด๋น ์ดํํธ ํจ์๋ฅผ ์คํํ๋ผ๋ ์๋ฏธ
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง ๋ ๋๋ฅผ ํฌํจํด์ ๋งค๋ฒ ๋ ๋๋ง ๋ ๋๋ง๋ค ์ดํํธ๊ฐ ์คํ๋๋ค๊ณ ๋ณด๋ฉด ๋จ
- ์ดํํธ ํจ์๊ฐ ์ฒ์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์์ ๋ ์คํ๋๊ณ ์ดํ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ์คํ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ปดํฌ๋ํธ ๋๋ ๋ง์ดํธ. ์ปดํฌ๋ํธ ๋ค๋ ์ ๋ฐ์ดํธ์ ๋์ผํ ์ญํ ์ ํ๊ฒ ๋จ
- Effect๋ ํจ์ ์ปดํฌ๋ํธ ์์์ ์ ์ธ๋๊ธฐ ๋๋ฌธ์ ํด๋น ์ปดํฌ๋ํธ์ props์ state์ ์ ๊ทผ ๊ฐ๋ฅ
- count๋ผ๋ state์ ์ ๊ทผํ์ฌ ํด๋น ๊ฐ์ด ํฌํจ๋ ๋ฌธ์์ด์ ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์
import React, [useState, useEffect) from "react";
function UserStatus(props){
const [isOnline. setIsonline] = useState(null);
function handleStatusChange(status){
setIsOnline(state.isOnline);
}
useEffect(() => {
ServerAPI.subscribeUserStatus(props.user.id, handleStatusChange);
return () => {
ServerAPI.unsubscribeUserStatus(props.user.id, handleStatusChange);
};
});
if (isOnline === null) {
return '๋๊ธฐ ์ค.....';
}
return isOnline ? '์จ๋ผ์ธ' : '์คํ๋ผ์ธ';
}
- ํจ์๋ฅผ ํ๋ ๋ฆฌํดํ๋๋ฐ ํด๋น ํจ์ ์์๋ ๊ตฌ๋ ์ ํด์งํ๋ api๋ฅผ ํธ์ถํ๋๋ก ๋์ด ์์
- useEffect์์ ๋ฆฌํดํ๋ ํจ์๋ ์ปดํฌ๋ํธ๊ฐ mount ํด์ , ์ฆ unmount ๋ ๋ ํธ์ถ
- useEffectHook์ ํ๋์ ์ปดํฌ๋ํธ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์์
- useState ํ ๊ณผ useEffect ํ ์ ๊ฐ๊ฐ ๋ ๊ฐ์ฉ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์
useEffect(() => {
// ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ์ดํ,
// ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๋ณ์๋ค ์ค ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ์คํ๋จ
// ์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋ง์ดํธ์ ์ธ๋ง์ดํธ์์ ๋จ ํ ๋ฒ์ฉ๋ง ์คํ๋จ
// ์์กด์ฑ ๋ฐฐ์ด ์๋ต ์ ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ์๋ง๋ค ์คํ๋จ
...
return () => {
// ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ฅผ ํด์ ๋๊ธฐ ์ ์ ์คํ๋จ
...
}
}, [์์กด์ฑ ๋ณ์1, ์์กด์ฑ ๋ณ์2,....]);
- Effect ํจ์์ ์์กด์ฑ ๋ฐฐ์ด์ด ๋ค์ด๊ฐ๊ณ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ์ดํ ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๋ณ์ ์ค์ ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ์คํ
- ์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ ๋ฃ์ผ๋ฉด ๋ง์ดํธ์ ์๋ง์ดํธ ์์ ๋จ ํ ๋ฒ์ฉ๋ง ์คํ
- ์์กด์ฑ ๋ฐฐ์ด ์๋ต ์์๋ ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ ์๋ง๋ค ์คํ
๐ useMemo()
- useMemo ํน์ memoized value๋ฅผ ๋ฆฌ๋ฐ ํ๋ ํ
- memoized value๋ useMemo ํ ๊ณผ ๋ฐ๋ก ๋ค์ ๋์ฌ useCallback ํ ์ ์ดํดํ๊ธฐ ์ํด์๋ memoized value์ ๋ํด ์๊ณ ์์ด์ผ ํจ
- useMemo์ useCallback ํ ์์๋ memoization์ด๋ผ๋ ๊ฐ๋ ์ด ๋์ด
- memoization์ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉํ๋ ๊ฐ๋
- ๋น์ฉ์ด ๋์, ์ฐ์ฐ๋์ด ๋ง์ด ๋๋ ํจ์์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋์๋ค๊ฐ ๊ฐ์ ์ ๋ ฅ ๊ฐ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ฉด ์๋ก ํจ์๋ฅผ ํธ์ถํ์ง ์๊ณ ์ด์ ์ ์ ์ฅํด ๋จ๋ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋ฐํํ๋ ๊ฒ
- ์ด๋ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ํจ์ ํธ์ถ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ์งง์์ง๊ณ ๋ถํ์ํ ์ค๋ณต ์ฐ์ฐ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ์ ์์์ ์ ๊ฒ ์ฌ์ฉ
- ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ฉ๋ชจ๋ ์ฐ๋ฆฌ๊ฐ ํํ ๋ฉ๋ชจํ๋ค๋ผ๊ณ ํํํ๋ ๊ฒ๊ณผ ๋น์ทํ ๋งฅ๋ฝ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๊ฒ ์ดํด ๊ฐ๋ฅ
- ๋ฉ๋ชจ๋ฅผ ํด๋์๋ค๊ฐ ๋ค์ ์ฌ์ฉํ๋ ๊ฒ
const memoizedValue = useMemo(
() => {
// ์ฐ์ฐ๋์ด ๋์ ์์
์ ์ํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
return computeExpensiveValue(์์กด์ฑ ๋ณ์1. ์์กด์ฑ ๋ณ์2);
},
[์์กด์ฑ ๋ณ์1. ์์กด์ฑ ๋ณ์2]
);
- ๋ฉ๋ชจ์ด์ ์ด์ ์ ๊ฐ๋ ์ฒ๋ผ ์์กด์ฑ ๋ฐฐ์ด์ ๋ค์ด์๋ ๋ณ์๊ฐ ๋ณํ์ ๊ฒฝ์ฐ์๋ง ์๋ก create ํจ์๋ฅผ ๋ ธ์ถํ์ฌ ๊ฒฐ๊ด๊ฐ์ ๋ฐํํ๋ฉฐ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๊ธฐ์กดํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ๊ทธ๋๋ก ๋ฐํ
- useMemo ํ ์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋ ๋๋ง๋ค ์ฐ์ฐ๋์ด ๋์ ์์ ์ ๋ฐ๋ณตํ๋ ๊ฒ์ ํผํ ์ ์์
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋น ๋ฅธ ๋ ๋๋ง ์๋๋ฅผ ์ป์ ์ ์์
- useMemo๋ก ์ ๋ฌ๋ ํจ์๋ ๋ ๋๋ง์ด ์ผ์ด๋๋ ๋์ ์คํ
- ๋ ๋๋ง์ด ์ผ์ด๋๋ ๋์ ์คํ๋์๋ ์๋ ์์ ์ useMemo์ ํจ์์ ๋ฃ์ผ๋ฉด ์ ๋จ
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ฑฐ๋ ์๋์ผ๋ก DOM์ ๋ณ๊ฒฝํ๋ ์์ ๋ฑ์ ๋ ๋๋ง์ด ์ผ์ด๋๋ ๋์ ์คํ๋์๋ ์๋๊ธฐ ๋๋ฌธ์ useMemo ํ ํจ์์ ๋ฃ์ผ๋ฉด ์ ๋๊ณ useEffect ํ ์ฌ์ฉ
const memoizedValue = useMemo(
() => computerExpensiveValue(a, b)
);
- ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ์ง ์์ ๊ฒฝ์ฐ ๋ ๋๋ง์ด ์ผ์ด๋ ๋๋ง๋ค ๋งค๋ฒ create ํจ์ ์คํ
- useMemo ํ ์ ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ์ง ์๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์์
const memoizedValue = useMemo(
() => {
return computeExpensiveValue(a, b);
},
[]
);
- ์์กด์ฑ ๋ฐฐ์ด์ ๋น ๋ฐฐ์ด์ ๋ฃ๊ฒ ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ๋๋ง createํจ์๊ฐ ํธ์ถ
- ๋ง์ดํธ ์ดํ์๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์
- ๋๋ถ๋ถ useMemo ํ ์ ์์กด์ฑ ๋ฐฐ์ด์ ๋ณ์๋ค์ ๋ฃ๊ณ ํด๋น ๋ณ์๋ค์ ๊ฐ์ด ๋ฐ๋์ ๋ฐ๋ผ ์๋ก ๊ฐ์ ๊ณ์ฐํด์ผ ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
๐ useCallback()
- useMemoHook๊ณผ ์ ์ฌํ ์ญํ ์ ํ์ง๋ง ๊ฐ์ด ์๋ ํจ์๋ฅผ ๋ฐํํ๋ค๋ ์ ์์ ๋ค๋ฆ
- ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ๋งค๋ฒ ํจ์๋ฅผ ์๋ก ์ ์ํ๋ ๊ฒ์ด ์๋๋ผ ์์กด ๋ฐฐ์ด์ ๊ฐ์ด ๋ฐ๋ ๊ฒฝ์ฐ์๋ง ํจ์๋ฅผ ์๋ก ์ ์ํ์ฌ ๋ฆฌํด
const memoizedCallback = useCallback(
() => {
doSomething(์์กด์ฑ ๋ณ์1, ์์กด์ฑ ๋ณ์2);
},
[์์กด์ฑ ๋ณ์1, ์์กด์ฑ ๋ณ์2]
);
- ํจ์์ ์์กด์ฑ ๋ฐฐ์ด์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์
- ์์กด์ฑ ๋ณ์์ ์๋ ๋ณ์ ์ค ํ๋๋ผ๋ ๋ณ๊ฒฝ๋๋ฉด ๋ฉ๋ชจ์ด์ ์ด์ ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐํ
- ์์กด์ฑ ๋ฐฐ์ด์ ๋ฐ๋ผ ๋ฉ๋ชจ์ด์ฆ๋ ๊ฐ์ ๋ฐํํ๋ค๋ ์ ์์๋ ์ ์ฆ ๋ฉ๋ชจ ํ ๊ณผ ์์ ํ ๋์ผ
useCallback(ํจ์, ์์กด์ฑ ๋ฐฐ์ด);
useMemo(() => ํจ์, ์์กด์ฑ ๋ฐฐ์ด);
- ์ ์ฆ ์ฝ๋ฐฑ ํ ์ ์ฌ์ฉํ์ง ์๊ณ ์ปดํฌ๋ํธ ๋ด์ ํจ์๋ฅผ ์ ์ํ๋ค๋ฉด ๋งค๋ฒ ๋ ๋๋ง์ด ์ผ์ด๋ ๋๋ง๋ค ํจ์๊ฐ ์๋ก ์ ์
- useCallbackHook์ ์ฌ์ฉํ์ฌ ํน์ ๋ณ์์ ๊ฐ์ด ๋ณํ ๊ฒฝ์ฐ์๋ง ํจ์๋ฅผ ๋ค์ ์ ์ํ๋๋ก ํ์ฌ ๋ถํ์ํ ๋ฐ๋ณต ์์ ์ ์์ ์ค
๐ useRef()
- Reference๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ Hook
- React์์ ๋ ํผ๋ฐ์ค๋ ํน์ ์ปดํฌ๋ํธ์ ์ ๊ทผํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธ
- ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ฅผ ๋ฐํ
- ๋ ํผ๋ฐ์ค ๊ฐ์ฒด์ current ์์ฑ์ ํ์ฌ ๋ ํผ๋ฐ์ค ํ๊ณ ์๋ ์๋ฆฌ๋จผํธ๋ฅผ ์๋ฏธ
const refContainer = useRef(์ด๊น๊ฐ);
- ํ๋ผ๋ฏธํฐ๋ก ์ด๊ธฐ๊ฐ์ ๋ฃ์ผ๋ฉด ํด๋น ์ด๊ธฐ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ฅผ ๋ฐํ
- ๋ฐํ๋ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ ์ปดํฌ๋ํธ์ ๋ผ์ดํํ์ ์ ์ฒด์ ๊ฑธ์ณ์ ์ ์ง
- useRefHook์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ current๋ผ๋ ์์ฑ์ ๊ฐ์ง ํ๋์ ์์๋ผ๊ณ ์๊ฐ
function TextInputWithFocusButton(props) {
const inputElem = useRef(null);
const onButtonClick = () => {
inputElem.current.focus();
};
return (
<>
<input ref={inputElem} type="text" />
<button onClick={onButtonClick}>
Focus the input
</button>
</>
);
}
- useRefHooks์ ์ฌ์ฉํ์ฌ ๋ฒํผ ํด๋ฆญ ์ input์ ํฌ์ปค์ค๋ฅผ ํ๋๋ก ํ๋ ์ฝ๋
- ์ด๊ธฐ๊ฐ์ null์ ๋ฃ์๊ณ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋ inputEI์ด๋ผ๋ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ฅผ input ํ๊ทธ์ ๋ฃ์ด ์ค
- ๋ฒํผ ํด๋ฆญ ์ ํธ์ถ๋๋ ํจ์์์ inputElim.current๋ฅผ ํตํด ์ค์ ์๋ฆฌ๋จผํธ์ ์ ๊ทผํ์ฌ ํฌ์ปค์ค ํจ์๋ฅผ ํธ์ถํ๊ณ ์์
<div ref={myRef} />
- ๋ ํผ๋ฐ์ค์ ๊ด๋ จ๋ DOM์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ref ์์ฑ์ ์ต์ํ ์ ์์
- ๋ฆฌ์กํธ์์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ ธ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค myRef์ current ์์ฑ์ ํ์ฌ ํด๋นํ๋ DOM ๋ ธ๋๋ฅผ ์ ์ฅ
- ref ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๋น์ทํ์ง๋ง useRef Hook์ ํด๋์ค์ instance ํ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ ๋ค์ํ ๋ณ์๋ฅผ ์ ์ฅํ ์ ์๋ค๋ ์ฅ์ ์ด ์์
- useRef Hook์ด ์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์
- useRef ํ ์ ๋งค๋ฒ ๋ ๋๋ง ๋ ๋๋ง๋ค ํญ์ ๊ฐ์ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ฅผ ๋ฐํ
- useRef() Hook์ ๋ด๋ถ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ๋ณ๋๋ก ์๋ฆฌ์ง ์์
- ์ปค๋ฐํธ ์์ฑ์ ๋ณ๊ฒฝํ๋ค๊ณ ํด์ ์ฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์์
๐ Callback ref
- ๋๋ ธ๋์ ๋ณํ๋ฅผ ์๊ธฐ ์ํ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๋ฐฑ ๋ ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์
- React๋ ref๊ฐ ๋ค๋ฅธ ๋ ธ๋์ ์ฐ๊ฒฐํ ๋๋ง๋ค Callback๋ฅผ ํธ์ถ
function MeasureExample(props) {
const [height, setHeight] = useState(0);
const measureRef = useCallback(node => {
if (node !== null) {
setHeight(node.getBoundingClientRect().height);
}
}, []);
return (
<>
<h1 ref={measuredRef}>์๋
, ๋ฆฌ์กํธ</h1>
<h2>์ ํค๋์ ๋์ด๋ {Math.round(height)}px ์
๋๋ค.</h2>
</>
);
}
- ๋ ํผ๋ฐ์ค๋ฅผ ์ํด์ useRefHook์ ์ฌ์ฉํ์ง ์๊ณ useCallback ํ ์ ์ฌ์ฉํ๋ callbackRef ๋ฐฉ์์ ์ฌ์ฉ
- useRefHook์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๊ฐ current ์์ฑ์ด ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ๋ฐ๋ก ์๋ ค์ฃผ์ง ์์
- callback-ref ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์ ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ์๋ฆผ์ ๋ฐ์ ์ ์๊ณ ์ด๋ฅผ ํตํ์ฌ ๋ค๋ฅธ ์ ๋ณด๋ค์ ์ ๋ฐ์ดํธํ ์ ์์
- useCallback ํ ์์กด์ฑ ๋ฐฐ์ด๋ก ๋น์ด์๋ ๋ฐฐ์ด, ์ฆ empty array๋ฅผ ๋ฃ์๋๋ฐ h1 ํ๊ทธ๊ฐ mount, unmount ๋ ๋๋ง callback ํจ์๊ฐ ํธ์ถ๋๋ฉฐ ์ฌ๋ ๋๋ง์ด ์ผ์ด๋ ๋์๋ ํธ์ถ๋์ง ์์
๐ Hook์ ๊ท์น
- Hook์ ๋ฌด์กฐ๊ฑด ์ต์์ ๋ ๋ฒจ์์๋ง ํธ์ถํด์ผ ํจ
- ๋ฐ๋ณต๋ฌธ์ด๋ ์กฐ๊ฑด๋ฌธ ๋๋ ์ค์ฒฉ๋ ํจ์๋ค ์์์ Hook์ ํธ์ถํ๋ฉด ์ ๋จ
- Hook์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ๋งค๋ฒ ๊ฐ์ ์์๋ก ํธ์ถ๋์ด์ผ ํจ
- React๊ฐ ๋ค์์ useState hook์ useEffect hook์ ํธ์ถํ์ฌ ์ปดํฌ๋ํธ์ state๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ด๋ฆฌํ ์ ์๊ฒ ๋จ
function MyComponent(props) {
const [name, setName] = useState('Inje');
if (name !== ' ') {
useEffect(() => {
...
});
}
....
}
- ์ด ์ฝ๋๋ if๋ฌธ์ด ๋ค์ด๊ฐ ์กฐ๊ฑด๋ฌธ์ ๊ฐ์ด ์ฐธ์ธ ๊ฒฝ์ฐ์๋ง useEffect ํ ์ ํธ์ถํ๋๋ก ๋์ด ์์
- ์ค๊ฐ์ name์ ๊ฐ์ด ๋น ๋ฌธ์์ด์ด ๋๋ฉด ์กฐ๊ฑด๋ฌธ์ ๊ฐ์ด false๊ฐ ๋์ด useEffect ํ ์ด ํธ์ถ๋์ง ์์
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๋๋ง ํ ๋๋ง๋ค ํ ์ด ๊ฐ์ ์์๋๋ก ํธ์ถ๋๋ ๊ฒ์ด ์๋๋ผ ์กฐ๊ฑด๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํธ์ถ๋๋ Hook์ด ๋ฌ๋ผ์ง์ผ๋ก ์๋ชป๋ ์ฝ๋
- ๋ฆฌ์กํธ ํจ์ ์ปดํฌ๋ํธ์์๋ง Hook์ ํธ์ถํด์ผ ํจ
- ์ผ๋ฐ์ ์ธ JavaScript ํจ์์์ Hook์ ํธ์ถํ๋ฉด ์ ๋จ
- Hook์ React ํจ์ ์ปดํฌ๋ํธ์์ ํธ์ถํ๊ฑฐ๋ ์ง์ ๋ง๋ ์ปค์คํ Hook์์๋ง ํธ์ถํ ์ ์์
- React ์ปดํฌ๋ํธ์ ์๋ state์ ๊ด๋ จ๋ ๋ชจ๋ ๋ก์ง์ ์์ค ์ฝ๋๋ฅผ ํตํด ๋ช ํํ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํด์ผ ํจ
๐ eslint-plugin-react-hooks
- Hook์ ๊ท์น์ ๋ฐ๋ฅด๋๋ก ๊ฐ์ ํด ์ฃผ๋ ํ๋ฌ๊ทธ์ธ
- eslint๋ JavaScript ์ฝ๋์์ ๋ฐ๊ฒฌ๋๋ ๋ฌธ์ ํจํด์ ์๋ณํ๊ธฐ ์ํ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ
- ์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด React ์ปดํฌ๋ํธ๊ฐ Hook์ ๊ท์ง์ ๋ฐ๋ฅด๋์ง ์๋์ง ๋ถ์ํ ์ ์์
- ์ด ํ๋ฌ๊ทธ์ธ์ ์์กด์ฑ ๋ฐฐ์ด์ด ์๋ชป๋์ด ์๋ ๊ฒฝ์ฐ์ ์๋์ผ๋ก ๊ฒฝ๊ณ ํ์๋ฅผ ํด์ฃผ๋ฉฐ ๊ณ ์น ๋ฐฉ๋ฒ์ ์ ์ํด ์ฃผ๊ธฐ๋ ํจ
const memoizedValue = useMemo(
() => {
// ์ฐ์ฐ๋์ด ๋์ ์์
์ ์ํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
return computeExpensiveValue(์์กด์ฑ ๋ณ์1, ์์กด์ฑ ๋ณ์2);
},
[์์กด์ฑ ๋ณ์1, ์์กด์ฑ ๋ณ์2]
);
- useMemo์์ ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ์ ๋ณ์๋ค์ createํจ์์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋์ง ์์
- useMemoHook์ ์๋์ ์๋ฏธ๊ฐ ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๋ณ์ ์ค ํ๋๋ผ๋ ๋ณํ๋ฉด create ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ create ํจ์์์ ์ฐธ์กฐํ๋ ๋ชจ๋ ๋ณ์๋ฅผ ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ๋ง์
- ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ ๋์ด ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ์์ฑํ ์ ์๊ฒ ๋ ๊ฒ
- ํ์ฌ๋ ์ง์ ์์กด์ฑ ๋ฐฐ์ด์ ์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด ์ค์
- eslint ํ๋ฌ๊ทธ์ธ react-hooks ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ด ๋จ
๐ Custom Hook ๋ง๋ค๊ธฐ
- ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ก์ง์ Hook์ผ๋ก ๋ง๋ค์ด ์ฌ์ฌ์ฉํ๊ธฐ ์ํจ
- userStatus๋ผ๋ ์ปดํฌ๋ํธ๋ isOnline์ด๋ผ๋ state์ ๋ฐ๋ผ์ ์ฌ์ฉ์์ ์ํ๊ฐ ์จ๋ผ์ธ์ธ์ง ์๋์ง๋ฅผ ํ ์คํธ๋ก ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ
- ๋์ผํ ์น์ฌ์ดํธ์์ ์ฐ๋ฝ์ฒ ๋ชฉ๋ก์ ์ ๊ณตํ๋๋ฐ ์จ๋ผ์ธ์ธ ์ฌ์ฉ์์ ์ด๋ฆ์ ์ด๋ก์์ผ๋ก ํ์ํ๊ณ ์ถ์
- userStatus์ useState, useEffect์ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด ๋์ผํ ๊ฒ์ ๋ณผ ์ ์์
- ์ฌ๋ฌ ๊ณณ์์ ์ค๋ณต๋๋ ์ฝ๋
- ๊ธฐ์กด ๋ฆฌ์กํธ์์๋ ๋ณดํต ์คํ ์ดํธ์ ๊ด๋ จ๋ ๋ก์ง์ด ์ค๋ณต๋๋ ๊ฒฝ์ฐ์ renderProps ๋๋ HOC๋ผ๊ณ ๋ถ๋ฆฌ๋ higher order component๋ฅผ ์ฌ์ฉ
- ์ฌ๊ธฐ์์๋ ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ์ถ์ถํ์ฌ ์ปค์คํ ํ ์ผ๋ก ๋ง๋๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ๋ณด๋๋ก ํจ
- ์ค๋ณต๋๋ ๋ก์ง์ custom hook์ผ๋ก ์ถ์ถ
๐ Custom Hook ์ถ์ถ
- ์ด๋ฆ์ด use๋ก ์์ํ๊ณ ๋ด๋ถ์์ ๋ค๋ฅธ Hook์ ํธ์ถํ๋ ํ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์
- ์ค๋ณต๋๋ ๋ก์ง์ useUserStatus๋ผ๋ ์ปค์คํ ํ ์ผ๋ก ์ถ์ถ
- ๋ ๊ฐ์ ์ปดํฌ๋ํธ์์ ์ค๋ณต๋๋ ๋ก์ง์ ์ถ์ถํ์ฌ ๊ฐ์ ธ์ด
- ๋ค๋ฅธ ์ปดํฌ๋ํธ ๋ด๋ถ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋ฅธ ํ ์ ์ถ์ถํ๋ ๊ฒ์ ๋ฌด์กฐ๊ฑด ์ปค์คํ ํ ์ ์ต์์ ๋ ๋ฒจ์์๋ง ํด์ผ ํจ
- ํ๋ผ๋ฏธํฐ๋ก ๋ฌด์์ ๋ฐ์์ง ์ด๋ค ๊ฒ์ ๋ฆฌํดํด์ผ ํ ์ง๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ํ ์ ์์
- ์ปค์คํ ํ ์ ๊ทธ๋ฅ ๋จ์ํ ํจ์์๋ ๊ฐ์
- ์ด๋ฆ์ use๋ก ์์ํ๋๋ก ํด์ ์ด๊ฒ์ด ๋จ์ํ ํจ์๊ฐ ์๋ ๋ฆฌ์กํธ ํ ์ด๋ผ๋ ๊ฒ์ ๋ํ๋ด ์ค
- ํ ์ด๊ธฐ ๋๋ฌธ์ ์์ ์๋ ํ ์ ๋ ๊ฐ์ง ๊ท์น์ด ์ ์ฉ
๐ Custom Hook ์ฌ์ฉ
- ์ ์ ์คํ ์ดํฐ์ค์ ์ ์ ๋ฆฌ์คํธ ์์ดํ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ค๋ณต๋ ๋ก์ง์ ์ ๊ฑฐํ๋ ๊ฒ
- ๋์์ ๋ณ๊ฒฝ์ด ์๊ณ ์ค๋ณต๋๋ ๋ก์ง๋ง์ ์ถ์ถํ์ฌ ์ปค์คํ Hook์ผ๋ก ๋ง๋ ๊ฒ
- ์ปค์คํ Hook์ ๋ฆฌ์กํธ ๊ธฐ๋ฅ์ด ์๋ Hook์ ๋์์ธ์์ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ฅด๋ ๊ท์น
- Custom Hook์ ์ด๋ฆ์ use๋ก ์์ํ๋ ๊ฒ์ ์ค์ํ ๊ท์น์
- ์ด๋ฆ์ด use๋ก ์์ํ์ง ์๋๋ค๋ฉด ํน์ ํจ์์ ๋ด๋ถ์์ hook์ ํธ์ถํ๋์ง๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ hook์ ๊ท์น ์๋ฐ ์ฌ๋ถ๋ฅผ ์๋์ผ๋ก ํ์ธํ ์ ์์
- state์ ์ฐ๊ด๋ ๋ก์ง์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ ๊ฒ
- ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ์์ ํ๋์ Custom Hook์ ์ฌ์ฉํ ๋ ์ปดํฌ๋ํธ ๋ด๋ถ์ ์๋ ๋ชจ๋ state์ effects๋ ์ ๋ถ ๋ถ๋ฆฌ
- ๊ฐ Custom Hook ํธ์ถ์ ๋ํด์ ๋ถ๋ฆฌ๋ state๋ฅผ ์ป๊ฒ ๋จ
- ChatUserSelector๋ผ๋ ์ปดํฌ๋ํธ๋ select ํ๊ทธ๋ฅผ ํตํด ๋ชฉ๋ก์์ ์ฌ์ฉ์๋ฅผ ์ ํํ ์ ์๋๋ก ํด์ฃผ๊ณ ์์ผ๋ฉฐ, ์ฌ์ฉ์๋ฅผ ์ ํํ ๊ฒฝ์ฐ ํด๋น ์ฌ์ฉ์๊ฐ ์จ๋ผ์ธ์ธ์ง ์๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋จ
- ๊ฐ Custom Hook์ ํธ์ถ ๋ํ ์์ ํ ๋ ๋ฆฝ์ ์
๊ณต๋ถํ ์๋ฃ
[์ง๊ธ ๋ฌด๋ฃ] ์ฒ์ ๋ง๋ ๋ฆฌ์กํธ(React) ๊ฐ์ | Inje Lee (์ํ) - ์ธํ๋ฐ
Inje Lee (์ํ) | ์๋ฐ์คํฌ๋ฆฝํธ์ CSS ๊ธฐ์ด ๋ฌธ๋ฒ๊ณผ ํจ๊ป ๋ฆฌ์กํธ์ ๊ธฐ์ด๋ฅผ ํํํ๊ฒ ๋ค์ง ์ ์์ต๋๋ค., ๊น๋ํ ๊ฐ์์๋ฃ, ๊ผผ๊ผผํ ์ค๋ช ์ผ๋ก์ฝ๊ฒ ๋ฐฐ์ฐ๋ ๋ฆฌ์กํธ ๊ฐ์์ ๋๋ค. ๐จ๐ซ ๋ฆฌ์กํธ์ ์ธ๊ณ๋ก
www.inflearn.com
'Front > React.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
USESTATE Hooks (0) | 2025.01.09 |
---|---|
๋ฆฌ์กํธ Hooks (0) | 2025.01.08 |
[React] ๋๊ธ ์ปดํฌ๋ํธ ์ ์ (Component & Props) (0) | 2024.08.26 |
[React] ๋ฆฌ์กํธ ๋ฒ์ 18 (0) | 2024.08.25 |
[React] ๋ฆฌ์กํธ styled-components๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ์คํ์ผ๋ง (0) | 2024.08.20 |