ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฏ useMemo๋ ๋ฌด์์ผ๊น?
**useMemo**๋ ๊ฐ์ ๊ณ์ฐํ ๋ ๋ถํ์ํ ๋ฐ๋ณต ๊ณ์ฐ์ ๋ง์์ฃผ๋ ๋๊ตฌ์์.
์ฝ๊ฒ ๋งํด, **"ํ์ํ ๋๋ง ๊ณ์ฐํ๊ณ , ๊ฐ์ด ๋ณํ์ง ์์ผ๋ฉด ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉ"**ํด์.
๐งฎ ๊ณ์ฐ ์ด์ผ๊ธฐ๋ก ์ดํดํ๊ธฐ
์ฌ๋ฌ๋ถ์ด ์ํ ์์ ๋ฅผ ํ๋ค๊ณ ์์ํด๋ณด์ธ์.
์ด๋ค ์ํ ๋ฌธ์ ์ ๋ต์ ํ ๋ฒ ๊ณ์ฐํ๋๋ฐ, ์น๊ตฌ๊ฐ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฌผ์ด๋ณด๋ฉด ๋ค์ ๊ณ์ฐํ ํ์๊ฐ ์๊ฒ ์ฃ ?
- ๋ต์ ๊ธฐ์ตํด๋๋ค๊ฐ ์น๊ตฌ์๊ฒ ๋ฐ๋ก ์๋ ค์ฃผ๋ฉด ๋ผ์.
React์์๋ ๋ง์ฐฌ๊ฐ์ง์์.
๋ณต์กํ ๊ณ์ฐ์ด ๋งค๋ฒ ์คํ๋๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ผ๋๊น, ๊ฐ์ด ๋ฐ๋์ง ์๋ ํ ๊ณ์ฐ์ ๊ฑด๋๋ฐ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฑฐ์์.
์ด ์ญํ ์ ํ๋ ๊ฒ ๋ฐ๋ก **useMemo**์
๋๋ค! ๐
๐ ๏ธ useMemo ๊ธฐ๋ณธ ์์
์๋๋ ๊ฐ๋จํ ์์ ์์.
์
๋ ฅ๊ฐ์ ๋ฐ๋ผ ๋ณต์กํ ๊ณ์ฐ์ ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์ ํด๋ณผ๊ฒ์.
import React, { useState, useMemo } from "react";
function ExpensiveCalculation({ num }) {
console.log("๋ณต์กํ ๊ณ์ฐ ์คํ ์ค... ๐");
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += num; // ํฐ ์ซ์๋ฅผ ๋ฐ๋ณตํด์ ๋ํด์ (์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์
)
}
return result;
}
function App() {
const [count, setCount] = useState(0);
const [input, setInput] = useState(1);
// useMemo๋ฅผ ์ฌ์ฉํด ๋ณต์กํ ๊ณ์ฐ์ ์ต์ ํ
const calculatedValue = useMemo(() => ExpensiveCalculation({ num: input }), [input]);
return (
<div>
<h1>useMemo ์์ </h1>
<p>๋ณต์กํ ๊ณ์ฐ ๊ฒฐ๊ณผ: {calculatedValue}</p>
<button onClick={() => setCount(count + 1)}>์นด์ดํฐ ์ฆ๊ฐ: {count}</button>
<input
type="number"
value={input}
onChange={(e) => setInput(Number(e.target.value))}
/>
</div>
);
}
export default App;
๐ ์ฝ๋์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น์?
- ExpensiveCalculation ํจ์
- ์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ ๋งค์ฐ ๋ณต์กํ๊ณ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ณ์ฐ์ ํฉ๋๋ค.
- useMemo๋ก ๊ณ์ฐ ๊ฒฐ๊ณผ ์ ์ฅ
- useMemo๋ input ๊ฐ์ด ๋ฐ๋ ๋๋ง ExpensiveCalculation์ ์คํํด์.
- input ๊ฐ์ด ๊ทธ๋๋ก๋ผ๋ฉด ์ด์ ์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค.
- ์นด์ดํฐ ๋ฒํผ ํด๋ฆญ
- count ์ํ๊ฐ ๋ฐ๋์ด๋ input ๊ฐ์ด ๋ฐ๋์ง ์์ผ๋ฉด ๊ณ์ฐ์ ๋ค์ ์คํํ์ง ์์์.
โณ useMemo๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
๋ง์ฝ useMemo๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด?
- count ๋ฒํผ์ ํด๋ฆญํ ๋๋ง๋ค ๋ถํ์ํ๊ฒ ๋ณต์กํ ๊ณ์ฐ์ด ์คํ๋ฉ๋๋ค.
- ์ ๋ ฅ๊ฐ input์ด ๋ฐ๋์ง ์์๋๋ฐ๋ ๋งค๋ฒ ๊ณ์ฐ์ ์๋ก ํ๋๊น ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ด์.
๐ useMemo์ ์ฅ์
- ๋ถํ์ํ ๊ณ์ฐ์ ํผํ ์ ์์ด์.
- ๊ณ์ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ผ ๋ ์ฑ๋ฅ ์ต์ ํ์ ํจ๊ณผ์ ์ด์์.
- ๊ฐ์ด ๋ฐ๋ ๋๋ง ๋ค์ ๊ณ์ฐ
- ์์กด์ฑ ๋ฐฐ์ด(์ ์์ ์ [input])์ ์๋ ๊ฐ์ด ๋ฐ๋์ง ์์ผ๋ฉด ๊ธฐ์กด ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค.
- React ์ปดํฌ๋ํธ์ ์ฑ๋ฅ ํฅ์
- ๊ณ์ฐ์ ์ต์ํํด์ ํ๋ฉด ๋ ๋๋ง์ด ๋ ๋นจ๋ผ์ ธ์.
๐งฉ useMemo๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์
- ๋ชจ๋ ๊ณ์ฐ์ ์ฌ์ฉํ ํ์๋ ์์ด์.
- useMemo๋ ๋ณต์กํ ๊ณ์ฐ์ ์ต์ ํํ ๋ ์ฌ์ฉํ๋ฉด ์ข์์.
- ๊ฐ๋จํ ๊ณ์ฐ์๋ ์คํ๋ ค ๋ถํ์ํ ์ฝ๋๊ฐ ๋ ์ ์์ด์.
- ์์กด์ฑ ๋ฐฐ์ด์ ์ ํํ๊ฒ ์ค์ ํด์ผ ํด์.
- [input]์ฒ๋ผ ์ด๋ค ๊ฐ์ด ๋ฐ๋ ๋ ๋ค์ ๊ณ์ฐํ ์ง ์ ํํ ์ง์ ํด์ผ ํฉ๋๋ค.
๐ ํ ์ค ์์ฝ
useMemo๋ ๋ถํ์ํ ๋ฐ๋ณต ๊ณ์ฐ์ ๋ง๊ณ , ๊ฐ์ด ๋ณํ ๋๋ง ๊ณ์ฐ์ ์คํํด ์ฑ๋ฅ์ ์ต์ ํํด์ฃผ๋ ํ ์ด์์.
'web > react hook' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
useReducer (0) | 2024.12.14 |
---|---|
useOptimistic (0) | 2024.12.14 |
useLayoutEffect (0) | 2024.12.14 |
useInsertionEffect (0) | 2024.12.14 |
useImperativeHandle (0) | 2024.12.14 |
- Total
- Today
- Yesterday
- ๋ฐ์ดํฐ์ ์ง
- ์ ์ฅ์
- component
- flushsync
- finddomnode
- preconnect
- ์คํ์
- Store
- Props
- dns-prefetch
- ์ต์ ๋ฐ์ดํฐ
- Nextjs
- useid
- experimental
- useinsertioneffect
- ๋ฒ ํ
- experimental_taintuniquevalue
- experimental_taintobjectreference
- ์ธ๋ถํฐํธ
- ์ํ๊ด๋ฆฌ
- react dom
- usedeferredvalue
- react
- useformstatus
- zustand
- state
- react dom hook
- useRef
- prefetchdns
- react hook
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |