[React] 성능 최적화1 - 연산 결과 재사용_useMemo

Chaewon Yoon (Jamie)·2022년 12월 19일
0

Memoization 기법을 적용한 연산 최적화

Memoization: 답을 기억하는 방법

useMemo


useMemo 사용 : 최적화하고 싶은 함수를 감싸주면 됨
첫 번째 인자로 콜백함수를 받아서 이 콜백함수가 리턴하는 값을 최적화
두 번째로 변화를 감지할 요소를 배열 안에 전달(useEffect의 의존성 배열과 같음)


(실습)
Memoization이 React component의 어떤 부분에 적용되어야 할까?
기분 좋은 일기, 안 좋은 일기 카운트, 비율 구하기
(App.js)
=> 배열에 data.length 데이터의 길이가 변할 때만 수행하도록 작성했으므로 일기 내용을 수정할 때는 동작X, 일기가 삭제되면 동작O


객체의 비구조화 할당으로 받아보자

Error
Uncaught TypeError: getDiaryAnalysis is not a function

=> useMemo는 콜백함수가 리턴하는 값을 리턴하므로 getDiaryAnalysis는 더 이상 함수가 아니라 값이 됨
=>함수가 아니라 값으로 써야 TypeError 해결

console에 "일기 분석 시작"이 두 번 찍히는 이유

App 컴포넌트가 처음 마운트될 때 data의 초기값은 [] 빈 배열
그 순간에 getDiaryAnalysis를 호출하므로 한 번 찍힘
그 이후에 setData로 인해 data가 변하면서 리렌더 됨 -> getDiaryAnalysis가 다시 호출되면서 두 번 찍히게 됨

정리)

어떤 함수가 값을 리턴하는데, 리턴까지의 연산을 최적화하고 싶을 때 useMemo를 사용해서 의존성 배열에 어떤 값이 변할 때만 연산을 다시 수행하고 싶은지 명시해주면 함수를 값처럼 사용해서 연산 최적화를 할 수 있음.

profile
keep growing as a web developer!🧃

0개의 댓글