Replies: 12 comments 8 replies
-
useCallback, useMemo, React.memo를 간단하게 설명해주세요 |
Beta Was this translation helpful? Give feedback.
-
memoization이 뭔지? |
Beta Was this translation helpful? Give feedback.
-
useCallback, useMemo를 직접 사용해 본 적은? |
Beta Was this translation helpful? Give feedback.
-
useCallback을 useState와 useEffect로 구현하려면 어떻게 하려나 |
Beta Was this translation helpful? Give feedback.
-
useMemo를 useState와 useEffect로 구현하려면 어떻게 할까? |
Beta Was this translation helpful? Give feedback.
-
useMemo와 useCallback을 사용하지 않으면 렌더링 최적화가 발생하지 않는 이유는? |
Beta Was this translation helpful? Give feedback.
-
클래스 컴포넌트의 생명주기를 설명해주세요. |
Beta Was this translation helpful? Give feedback.
-
프로젝트에 함수 컴포넌트를 사용한 이유? |
Beta Was this translation helpful? Give feedback.
-
리액트 성능 최적화를 해본 적이 있는지? |
Beta Was this translation helpful? Give feedback.
-
리액트에서 렌더링이란? |
Beta Was this translation helpful? Give feedback.
-
useCallback, useMemo, React.memo
useCallback
: 첫 번째 인자로 콜백 함수를 전달받고, 두 번째 옵셔널 인자로 의존성 배열을 전달받는다.
메모이제이션된 콜백을 반환하며, 반한되는 콜백은 의존성이 변경되었을 때만 변경된다.
useMemo
: 첫 번째 인자로 생성 함수를 전달받고, 두 번째 옵셔널 인자로 의존성 배열을 전달받는다.
메모이제이션된 값을 반환하며, 반한되는 값은 의존성이 변경되었을 때만 변경된다.
useCallback과 useMemo는 매번 렌더링될 때마다 새로 함수를 생성하거나 값을 계산할 필요가 없을 때 메모리에 저장된 값을 가져와서 사용하게 되어 최적화할 수 있다.
React.memo
: 내장 고차 컴포넌트 타입으로, 컴포넌트 타입을 인수로 받고, 새롭게 래핑된 컴포넌트를 리턴된다. 래퍼 컴포넌트의 기본 동작은
props
의 변경이 있는지 확인하고, 변경된props
가 없다면 다시 렌더링 하지 못하게 하는 것이다.shallow equality (얕은 비교)
를 사용한다. 즉 서로 다른 객체에 있는 모든 개별 필드를 검사하여 객체의 내용이 같은지 다른지 확인한다. 다시말해,obj1.a === obj2.a && obj1.b === obj2.b && ........
를 수행하는 것이다.사용되는 상황들
두 이펙트 모두 매 랜더링마다 바뀌는
getFetchUrl
을 가지기 때문에 의존성 배열도 쓸모가 없다.이럴 경우에 useCallback을 사용할 수 있다.
React.memo를 적용할 수 없는 경우 useCallback, useMemo를 사용할 수 있다.
Component
가 렌더링 될 때 마다onClick
함수가 변하지 않았음에도MemoizedChildComponent
는 해당 props 가 새로운 참조로 변경되었음을 확인하고 다시 렌더링을 수행한다.useCallback과 useMemo는 의존성의 변경이 일어나지 않았다면 동일한 참조를 유지하기 때문에 렌더링을 건너 띌 수 있다.
useMemo를 사용해서 리액트 컴포넌트가 렌더링 결과물을 지난번과 정확히 동일한 참조를 반환히여, 해당 하위 컴포넌트를 렌더링하는 것을 건너 뛰게 할 수 있다.
Beta Was this translation helpful? Give feedback.
All reactions