티스토리 뷰
7. useMemo
: 비싼 계산에 대한 결과를 저장(메모리제이션)하고, 의존성 배열을 트리거로 하여 변화가 없으면 저장된 값 반환
: 일반적으로 "값" 에 대한 저장
const cachedValue = useMemo(calculateValue, dependencies)
- 첫번째 인수로는 값을 반환하는 생성 함수
- 단순한 연산 결과만 아니라 컴포넌트 또한 포함한다. - 두번째 인수로는 의존하는 값의 배열
// useMemo를 사용하여 필터링된 리스트를 캐싱
const filteredItems = useMemo(() => {
console.log('Filtering items...');
return items.filter(item => item.toLowerCase().includes(filterText.toLowerCase()));
}, [filterText, items]); // filterText 또는 items가 변경될 때만 필터링 실행
7-1. React.memo
: 자식 컴포넌트는 부모 컴포넌트에 종속 -> 값 변화가 없어도 부모의 리렌더링 시, 자식도 리렌더링
: 의미 없는 자식의 렌더링을 막기 위해 -> "컴포넌트"를 저장(메모리제이션)
: 종속된 props를 비교(* 일반적으로 얕은 비교)하여 리렌더링 여부를 결정
: PureComponent와 비슷하게 동작하지만 함수형 컴포넌트에서 사용됨
: 생각 없는 사용은 메모리 이슈를 초래....
// Ex -부모 컴포넌트
const Parent = () => {
const [count, setCount] = useState(0);
const [name, setName] = useState('John');
return (
<div>
<Child count={count} />
<button onClick={() => setCount(count + 1)}>증가</button>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="이름 변경"
/>
</div>
);
};
// Ex - 자식 컴포넌트
const Child = React.memo(({ count }) => {
console.log('Child 컴포넌트가 리렌더링되었습니다.');
return <div>Count: {count}</div>;
});
const Child = React.memo(
({ count, user }) => {
console.log('Child 컴포넌트가 리렌더링되었습니다.');
return (
<div>
<div>Count: {count}</div>
<div>User: {user.name}</div>
</div>
);
},
(prevProps, nextProps) => {
// 특정 props에 대한 정교한 비교
// count 값이 동일하면 리렌더링하지 않음
return prevProps.count === nextProps.count && prevProps.user.name === nextProps.user.name;
}
);
참고
ASAC 수업자료
모던 리액트 Deep Dive
https://ko.react.dev/reference/react/useMemo
'정리용 > react' 카테고리의 다른 글
[07-React] 6-8. React Hook :: useCallback (0) | 2025.01.17 |
---|---|
[07-React] 6-6. React Hook :: useLayoutEffect (0) | 2025.01.17 |
[07-React] 6-4. React Hook :: useEffect (0) | 2025.01.15 |
[07-React] 6-5. React Hook :: useContext (0) | 2025.01.15 |
[07-React] 6-3. React Hook :: useRef (0) | 2025.01.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- git
- asac#asac7기
- useReducer
- ssh
- asac7#asac
- useMemo
- acas#acas7기
- useState
- react
- useLayoutEffect
- asac7기
- useContext
- memo
- ASAC
- Nginx
- useRef
- asac7
- useEffect
- acac
- useCallback
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함