useMemo

✒️ 2025-05-28 10:43 내용 수정


useMemo

리렌더링 사이의 함수 결과를 캐시할 수 있는 Hook

const cachedValue = useMemo(calculateFn, dependencies);
import { useMemo } from 'react';

function Test() {

	// useMemo() 사용 시 리렌더링 사이에 result를 캐싱하도록 지시
	const result = useMemo(()=>{ // useMemo에 전달하는 함수는 인자를 받지 않는다.
		doMultiple(num1, num2); // 계산 함수는 어떤 타입의 값이든 반드시 반환
	}, [num1, num2]); // num1과 num2가 변경되지 않는 한 useMemo()로 반환되는 값은 동일한 값이다.
}
function App() {
	return(
		{/* TestPage component에 num1와 num2을 전달 */}
		<TestPage num1={10} num2={5}/>
	)
}

export default App;
import { useMemo, memo } from 'react';

export default function TestMemoPage({num1, num2, theme='dark'}) {

    // useMemo()를 사용하지 않았다면 result는 theme이 변경될 때마다 매번 계산됨
    // useMemo() 사용시 리렌더링 사이에 doMultiple() 계산 결과를 캐싱하도록 지시

	// 전달할 함수 내에서 호출할 함수(즉 계산할 함수)
    function doMultiple(num1, num2) {
        return num1 * num2;
    }

    const result = useMemo(()=>{// useMemo에 전달하는 함수는 인자를 받지 않는다.
		return doMultiple(num1, num2);
	}, [num1, num2]); // num1과 num2가 바뀌지 않는 한 result는 동일한 값을 캐싱한다.

    return(
        <div className={theme}>
            <Test result={result}/>
        </div>
    )
}

// theme이 변경되더라도 result가 변경되지 않으면 리렌더링하지 않는다.
const Test = memo(function Test({ result }) {
    return (
        <div>계산 결과 : {result}</div>
    )
})