๊ฐ๋ฐํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๋ฅผ ๋ณธ ์ ์์ ๊ฑฐ๋ค.
[์ปดํฌ๋ํธA] ๋ ๋๋ง๋จ
[์ปดํฌ๋ํธA] ๋ ๋๋ง๋จ
[์ปดํฌ๋ํธA] ๋ ๋๋ง๋จ
๐ โ์ด๊ฑฐ ์ 3๋ฒ์ด๋ ๋ ๋๋ง ๋์ง...?โ
React๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๋ props๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ค.
ํ์ง๋ง ์ด๊ฒ ๊ผญ "ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ง๋ค"๋ ๋ป์ ์๋๊ณ ,
๊ฐ์ DOM ๋น๊ต + ์ค์ DOM ๋ณ๊ฒฝ์ React๊ฐ ์ต์ ํํด์ ์ฒ๋ฆฌํด์ค๋ค.
๊ทธ๋ผ์๋ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ฑ๋ฅ ๋ญ๋น์ด๊ณ ,
์ค์ ๋ก ํ๋ ์ ๋๋, ๊น๋นก์, ๋ฆฌ์์ค ๋ญ๋น์ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
์ด๋ฒ ๊ธ์์๋
โ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ง๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐฉ๋ฒโ์
๊ตฌ์กฐ์ ์ผ๋ก ์ ๋ฆฌํด๋ณด์.
function Parent() {
const [count, setCount] = useState(0);
return (
<>
<button onClick={() => setCount(count + 1)}>+1</button>
<Child />
</>
);
}
function Child() {
console.log('๐ก Child ๋ ๋๋ง');
return <div>์์์
๋๋ค</div>;
}
๋ฒํผ ํด๋ฆญ ์๋ง๋ค Child
๋ ๋งค๋ฒ ๋ ๋๋ง๋๋ค.
โ ์ด์ : Parent
๊ฐ ๋ ๋๋ง๋๋ฉด ๋ชจ๋ ์์๋ ๋ค์ ํจ์ ์คํ๋จ
React.memo
const Child = React.memo(() => {
console.log('Child ๋ ๋๋ง');
return <div>memoized child</div>;
});
useCallback
์ผ๋ก ํจ์ ๋ฉ๋ชจ์ด์งconst handleClick = useCallback(() => {
// ํจ์ ๋ด๋ถ ๋ก์ง
}, []);
React.memo
์ ๊ฐ์ด ์ธ ๋ ํนํ ์ค์useMemo
๋ก ๊ณ์ฐ ๊ฒฐ๊ณผ ์บ์ฑconst expensiveValue = useMemo(() => calculateHeavy(data), [data]);
key
์์ฑ ๊ด๋ฆฌ{list.map(item => (
<Item key={item.id} {...item} />
))}
<Child value1={value1} /> // โ
<Child /> // โ
ํ์ํ props๋ง ์ ๋ฌ
console.log('[์ปดํฌ๋ํธ] ๋ ๋๋ง')
์ผ๋ก ์ถ์ Highlight updates
์ฒดํฌํ๋ฉด ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋์ง ์์์ผ๋ก ํ์๋จ์ํฉ | ์ถ์ฒ ์ ๋ต |
---|---|
๋์ผํ props๋ก ๊ณ์ ๋ ๋๋ง๋จ | React.memo |
props๋ก ํจ์ ์ ๋ฌ ์ ๋ฆฌ๋ ๋๋ง ๋ฐ์ | useCallback |
๋ฌด๊ฑฐ์ด ๊ณ์ฐ์ด ์์ฃผ ์คํ๋จ | useMemo |
๋ฆฌ์คํธ ๋ ๋๋ง ์ต์ ํ | key ๊ด๋ฆฌ + memo |
context ๋ฆฌ๋ ๋๋ง ๋ฒ์ ์ค์ด๊ธฐ | context ๋ถํ or ๋ณ๋ store ์ฌ์ฉ |
์ฒ์์ ๊ทธ๋ฅ React.memo
ํ๋๋ก ํด๊ฒฐ๋๊ฒ ์ง ์ถ์๋๋ฐ,
์ค์ ๋ก๋ ํจ์๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋๋ ๊ฒ๋ ๋ ๋๋ง์ ์ ๋ฐํ๋ค๋ ๊ฑธ ๋์ค์ ๊นจ๋ฌ์๋ค.
์ง๊ธ์ ์ฑ๋ฅ ๋ฏผ๊ฐํ ํ์ด์ง์์
memo
โก๏ธ "๋ถํ์ํ ๋ ๋๋ง์ ๋ง๋ ๊ฑด ์ต์ ํ๊ฐ ์๋๋ผ, ์ค๊ณ์ ๊ฒฐ๊ณผ๋ค."