본문 바로가기
[항해99] TIL

14일차 (최적화 React hook, Virtual DOM)

by @kkkk_biiin 2023. 8. 29.
728x90

최적화: 불필요한 렌더링을 줄이는 방법

1. React.memo: 컴포넌트를 캐싱

2. useCallback: 함수를 캐싱

3. useMemo: value를 캐싱

 

 

최적화 필요 개념

1. 캐싱: 메모리에 임시적으로 저장해두는 행위

2. Memoization: 컴포넌트의 state 변경으로 인해 props가 변경되지 않는 한 컴포넌트가 리렌더링이 되지 않는 것

 

 

React.memo: 컴포넌트의 메모이제이션

export default React.memo(Child); <= 감싸주면 끝

 

 

useMemo: value에 대한 메모이제이션

const heavyWork = () => {
	for (let i = 0; i < 1000000000; i++) {}	
	return 100;
};

const value = useMemo(() => heavyWork(), []);
  
위와 같은 무거운 코드는 로딩이 되는데 오래 걸림 그래서 값을 저장할 장치가 필요한데,
그것이 useMemo임

--------------------------------------------------------------------------

객체 저장할 때도 마찬가지인데, 다른 버튼 때문에 렌더링이 일어났을 때,
객체가 저장된 주소값이 바뀌기 때문에 컴퓨터는 값이 바뀐거로 판단하고 렌더링이 발생함.
=> 이때 useMemo를 사용하면 됨

Const me = useMemo(() => {
	return {
		name: ‘Kim’,
		age:21,
		isAlive: isAlive ? ‘생존’ : ‘사망’
	}
}, [isAlive]};

=> isAlive에 따라 렌더링이 발생해야 하기 때문에 의존성 배열에 isAlive가 들어가야 함
But 남발하게 되면 메모리 낭비가 발생함

 

 

DOM(Document Object Model)의 기본 개념

1. 문서 전체 = document

2. 각각의 컴포넌트 = element 

3. Dom = 엘리먼트를 tree 형태로 표현한 것

4. 노드: <div> <p> 같은 것

5. Api: html 요소에 접근해서 수정할 수 있는 함수

 

 

Virtual DOM

1. 실제 DOM의 복사본

2. 객체 상태로 메모리에 저장되기 때문에 실제 DOM 조작보다 빠름

3. 리액트
    1) 화면이 갱신되기 전 구조가 담겨있는 가상돔 객체와
    2) 화면 갱신 후 구조가 담겨있는 가상돔 객체를 가짐

4. Diffing: 위의 두 구조를 비교해서 변화가 일어난 부분을 파악하는 과정

5. Reconciliation(재조정): 파악이 다 끝나면, 변경사항을 모두 모아 한 번만 적용(배치업데이트)
728x90

'[항해99] TIL' 카테고리의 다른 글

16일차 (React Router Dom)  (0) 2023.08.30
15일차 (Redux)  (0) 2023.08.30
13일차 (Styled components, Globalstyles, React Hook)  (0) 2023.08.28
3주차 WIL(Props)  (0) 2023.08.28
12일차 (React 컴포넌트 중복 제거)  (0) 2023.08.28