벨로퍼트와 함께하는 모던 리액트를 학습하여 작성했습니다.
1.useMemo
리액트의 훅 중 하나로, 성능 최적화를 위해 메모이제이션을 수행합니다.
메모이제이션은 계산된 값을 기억해두어, 같은 입력 값에 대해 같은 결과를 반복적으로 계산하지 않도록 합니다.
이 훅은 주로 렌더링 성능을 최적화할 때 사용됩니다.
2.예시
useMemo의 두 번째 인자로 의존성 배열 을 포함시켜 배열에 포함된 값이 변경될 때만 메모이제이션된 값을 다시 계산합니다. 배열이 빈 경우, 메모이제이션된 값은 컴포넌트가 마운트될 때 한 번만 계산됩니다.
아래 코드의 경우 number 값이 변할때만 메모이제이션된 값을 다시 계산합니다.
여기에서 setOtherState(!otherState)}을 통해 App 컴포넌트가 다시 렌더링되게 하는 경우에도 number 상태는 변경되지 않았기 때문에 복잡한 계산은 안해도 된다.
import React, { useState, useMemo } from 'react';
function ExpensiveComponent({ number }) {
// 복잡한 계산을 수행하는 함수
const computeExpensiveValue = (num) => {
console.log('복잡한 계산 중...');
// 계산에 시간이 걸리는 작업
return num * 2;
};
// useMemo를 사용하여 계산된 값을 메모이제이션합니다.
const expensiveValue = useMemo(() => computeExpensiveValue(number), [number]);
return <div>계산된 값: {expensiveValue}</div>;
}
function App() {
const [number, setNumber] = useState(1);
const [otherState, setOtherState] = useState(false); // 다른 상태
return (
<div>
<button onClick={() => setNumber(number + 1)}>숫자 증가</button>
<button onClick={() => setOtherState(!otherState)}>다른 상태 변경</button>
<ExpensiveComponent number={number} />
</div>
);
}
export default App;
만약 useMemo를 사용하지않으면 위에서 setOtherState(!otherState)}를 할때마다 복잡한 계산을 하여 성능의 저하로 이어질것이다.
// useMemo를 사용하지 않음
const expensiveValue = computeExpensiveValue(number);
'FrontEnd > React' 카테고리의 다른 글
[React] useCallback (0) | 2024.08.06 |
---|---|
[React] useEffect (0) | 2024.08.06 |
[React] 가상 DOM (Virtual DOM) (0) | 2024.08.06 |