Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- NonNullable
- 폰트적용하기
- reactjs
- returnType
- 타입스크립트
- React.js
- vue.js
- 제네릭
- 성능최적화
- const 단언문
- TSDoc
- 커스텀
- React Native
- 개발콘텐츠
- 공통컴포넌트
- 타입좁히기
- click and drag
- Chart.js
- typescript
- 2022
- javascript
- CSS
- 리액트
- utilty type
- 티스토리꾸미기
- react
- 반복줄이기
- 누구나 자료구조와 알고리즘
- JS console
- 레이아웃쪼개기
Archives
- Today
- Total
몽땅뚝딱 개발자
[React] useMemo 본문
◽ useMemo의 형태
useMemo( param1
callbackFn, param2
[의존성 배열] )
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
- 컴포넌트의 성능을 최적화시킬 수 있는 대표적인 react hook이다. useMemo는 처음에 계산된 결과값을 메모리에 저장해서 컴포넌트가 반복적으로 렌더링 되더라도 계속 같은 함수를 호출하지 않고 이전에 이미 계산된 결과 값을 메모리에서 꺼내와서 재사용한다.
- 렌더링 중에 실행되기 때문에 통상적으로 렌더링 중에는 하지 않는 것을 이 함수 내에서 하면 안된다. 예를 들어, 사이드 이펙트(Side Effect)에서 하는 일을 useMemo에 적지 않도록 한다.
- 첫번째 인자로는 콜백 함수를, 두번째 인자로 의존성 배열을 받는다. 두번째 인자인 배열의 요소 값이 업데이트 될 때만 콜백 함수를 다시 호출하여 memoization 된 값을 업데이트해주어 memoization한다.
- 두번째 인자를 빈 배열([])로 넘겨주면 맨 처음 컴포넌트가 마운트 되었을 때만 값을 계산하고 이후에는 항상 memoization된 값을 꺼내와 사용한다.
- 값을 재활용하기 위해 따로 메모리를 소비하여 저장해놓는 것이기 때문에 성능에 영향을 미칠 수 있으므로 꼭 필요할 때만 사용해야 한다.
- Object는 원시타입과 달리 주소값으로 저장이 되기 때문에 값의 형태는 같아보여도 메모리 상의 주소가 완전히 달라 변경이 되었다고 본다. Object 타입 사용 시 주의해야한다.
◽ useMemo 사용하기
let result = testFunc() // 재렌더링 될 때 마다 함수가 실행된다.
useMemo(() => { return testFunc() }) // 컴포넌트 렌더링 시 매번 실행된다.
useMemo(() => { return testFunc() }, [])
useMemo(() => { return testFunc() }, [변수]) // 이렇게 state나 props 변수를 지정할 수도 있다.
◽ 함수형 컴포넌트가 렌더링 하는 과정과 useMemo
[함수형 컴포넌트가 렌더링 하는 과정]
- 렌더링 → Component 함수 호출 → 모든 내부 변수 초기화
- Component가 렌더링 될때마다 calculate 함수가 실행되며 value는 초기화 된다.
function calculate() {
// 로직..
return result;
}
function Component() {
const value = calculate();
return <div>{value}</div>
}
[useMemo를 사용하여 렌더링 하는 과정]
- 렌더링 → Component 함수 호출 → Memoize된 함수를 재사용
function calculate() {
// 로직..
return result;
}
function Component() {
const value = useMemo(() => {
return calculate();
}, [item])
return <div>{value}</div>
}
참고 및 출처
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > React.js · Next.js' 카테고리의 다른 글
[React] Swiper 적용하기 (with. TypeScript, SCSS) (0) | 2023.03.10 |
---|---|
[React] 소소한 깨달음과 팁 정리 (with. TypeScript) (0) | 2023.03.07 |
[React] 카카오맵 사용하기 With. 타입스크립트 - (3) 커스텀 마커 사용하기 (0) | 2023.02.16 |
[React] 카카오맵 사용하기 With. 타입스크립트 - (2) 마커 출력하기 (0) | 2023.02.16 |
[React] 카카오맵 사용하기 With. 타입스크립트 - (1) key 발급과 스크립트 적용하기 (0) | 2023.02.16 |
Comments