useEffect
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋ ํน์ ์์ ์ ์ํํ๊ฑฐ๋, ์ํ๊ฐ props๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํน์ ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ค.
useState
state์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋ค.
- useState: ์ํ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ค. ๋ ๋๋ง์ ๋ฐ์๋์ด UI์ ์ํฅ์ ๋ฏธ์น๋ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ.
- useRef: ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋์ง ์๋๋ค. ์ฆ, useRef๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ํ๋ฉด์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ ์ ๋ ฅ ๊ฐ์ด ํ๋ฉด์ ์ฆ์ ๋ฐ์๋๊ฑฐ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ํด๋น ์ํ๋ฅผ ์ฐธ๊ณ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด useRef๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ ์ ์๋ค.
useMemo
useMemo๋ ์ฌ๋ฌ ๊ฐ์ state๊ฐ ์์ ๋ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋๋ฐ ๋์์ด ๋๋ค. ํนํ, ์ด๋ค ๊ฐ์ด๋ ์ฐ์ฐ์ด ํน์ ์ํ์ ๋ณ๊ฒฝ์ ์ํด์๋ง ๋ค์ ๊ณ์ฐ๋๊ธฐ๋ฅผ ์ํ ๋ useMemo๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.
์๋ ์ฝ๋์์ useMemo๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด otherCount ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋๋ ๋ถํ์ํ๊ฒ fibonacci ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์๋ค.
import React, { useState, useMemo } from 'react';
function ExpensiveComponent() {
const [count, setCount] = useState(0);
const [otherCount, setOtherCount] = useState(0);
// ๋ณต์กํ ๊ณ์ฐ ์์: ํผ๋ณด๋์น ์์ด ๊ณ์ฐ
const calculateFibonacci = (num) => {
console.log("Calculating Fibonacci...");
if (num <= 1) return num;
return calculateFibonacci(num - 1) + calculateFibonacci(num - 2);
};
// `count`๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง Fibonacci ๊ณ์ฐ ์คํ
const fibonacci = useMemo(() => calculateFibonacci(count), [count]);
return (
<div>
<h1>useMemo Example - Expensive Calculation</h1>
<p>Count: {count}</p>
<p>Fibonacci of Count: {fibonacci}</p>
<button onClick={() => setCount(count + 1)}>Increase Count</button>
<p>Other Count: {otherCount}</p>
<button onClick={() => setOtherCount(otherCount + 1)}>Increase Other Count</button>
</div>
);
}
export default ExpensiveComponent;
useCallback
useMemo๋ ๊ฐ์ memoizationํ๋ค๋ฉด, useCallback์ ํจ์ ์์ฒด๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ค.
์๋์ ์ฝ๋๋ useMemo์ ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก count๊ฐ ๋ณํ ๋๋ง ๋ฆฌ๋ ๋๋ง ๋๋๋ก ๋ฉ๋ชจ์ด์ ์ด์ ํ ๊ฒ์ด๋ค.
import React, { useState, useCallback } from 'react';
import ChildComponent from './ChildComponent';
function ParentComponent() {
const [count, setCount] = useState(0);
const [text, setText] = useState('');
// `handleClick` ํจ์๊ฐ `count`๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ์๋ก ์์ฑ๋จ
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]);
return (
<div>
<h1>useCallback Example</h1>
<p>Count: {count}</p>
<button onClick={handleClick}>Increase Count</button>
<input
type="text"
value={text}
onChange={(e) => setText(e.target.value)}
placeholder="Type something..."
/>
{/* ์์ ์ปดํฌ๋ํธ์ ์ฝ๋ฐฑ ์ ๋ฌ */}
<ChildComponent onClick={handleClick} />
</div>
);
}
export default ParentComponent;
ํ์ง๋ง useMemo์ useCallback ๋ชจ๋ ๊ณ์ฐ ๋น์ฉ ์์ฒด๊ฐ ๋ค๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ์ฐ์ฐ์ ํฌํจํ์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค. ์์ฒ ๊ฐ ์ด์์ ํญ๋ชฉ์ ํํฐ๋งํ๊ฑฐ๋ ์ฌ๊ท์ ์ฐ์ฐ์ด ํ์ํ๊ฑฐ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ณ ๋น์ฉ ์ฐ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฑ๋ฑ..
'๐ป์น(Web) > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น๋ ๋๊ตฌ ๋น๊ต: Webpack๊ณผ Vite์ ์ฐจ์ด / ์ปดํ์ผ๊ณผ ๋น๋ (0) | 2024.11.10 |
---|---|
[TypeScript]TypeScript ์ดํดํ๊ธฐ(1) - ํ์ ์งํฉ / ์ถ๋ก / ๋จ์ธ (0) | 2024.09.04 |
[TypeScript]TypeScript์ ๊ฐ์ ๋ฐ ๊ธฐ์ด (3) | 2024.09.03 |
ํ๋ก ํธ์๋ ์ฝ๋ฉ์ปจ๋ฒค์ (0) | 2024.07.13 |
[React]Custom Hook (0) | 2024.06.28 |