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
- cookie
- 정렬
- typscript
- 스택
- 라이프사이클
- 해쉬
- 그리디
- 투포인터
- react-query
- react
- isNaN
- 버블정렬
- 빅오
- JavaScript
- nextjs
- Algorithm
- next.js
- NextAuth
- textarea autosize
- 블로그만들기
- styled-components
- TypeScript
- tailwindcss
- aws lightsail
- never타입
- 알고리즘
- js알고리즘
- nestjs
- 슬라이딩윈도우
- 큐
Archives
- Today
- Total
far
[React] 리액트 메모이제이션 훅 본문
메모이제이션이란 자바스크립트의 캐싱 기술중 하나이며 메모리에 특정 정보를 기록해두고 필요할때 마다 정보를 가져와 활용하는 기법이다.
리액트에서는 useCallback과 useMemo라는 훅으로 사용이 가능하며, 불필요한 렌더링을 줄여 퍼포먼스를 최적화 시켜주기에 사용법을 알아두는 편이 좋다.
useMemo
전달된 함수가 실행되고 반환된 결과를 캐싱한다.
import { useMemo } from 'react';
function TodoList({ todos, tab, theme }) {
const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]);
// ...
}
useMemo는 두 번째 인자가 바뀌지 않는 한 다시 실행되지 않는다.
useCallback
useCallback은 전달된 함수 자체만 캐싱한다. useCallback은 useMemo를 기반으로 만들어졌으며 함수를 사용할 때 편하게 작성할 수 있도록 해준 것이다.
import { useCallback } from 'react';
export default function ProductPage({ productId, referrer, theme }) {
const handleSubmit = useCallback((orderDetails) => {
post('/product/' + productId + '/buy', {
referrer,
orderDetails,
});
}, [productId, referrer]);
useCallback역시 두 번째 인자가 바뀌지 않는 한 다시 실행되지 않는다.
* 함수를 자식컴포넌트에 props로 넘길 때 useCallback을 사용하지 않으면 매번 새로운 함수가 실행되어 자식 컴포넌트에서 부모로 부터 받은 props가 바뀌었다고 인식돼 자동으로 리렌더링이 발생한다.
제로초님의 React 기본 강좌를 참고했습니다.
https://www.youtube.com/watch?v=6H6KncvVc8s&list=PLcqDmjxt30RtqbStQqk-eYMK8N-1SYIFn&index=52
'React > 기록' 카테고리의 다른 글
[React + Typescript] Intersection Observer로 간단한 스크롤 애니메이션 만들기 (텍스트 가로 이동, Fade In/Out) (0) | 2023.03.30 |
---|---|
[React] Key에 대하여 (Map의 key props) (0) | 2023.03.15 |
[React + tailwindCSS] 게시글 이미지 첨부 및 첨부된 이미지 리스트 만들기 (0) | 2023.01.21 |
[React] 리액트 라이프사이클 (0) | 2022.12.24 |
[React] Loadable-components로 코드 스플리팅 하기 (0) | 2022.12.02 |
Comments