이벤트 리스너를 통한 잦은 렌더링 횟수 줄이기
Post

이벤트 리스너를 통한 잦은 렌더링 횟수 줄이기

이벤트 리스너를 통해 함수 호출 시 너무 잦은 호출이 발생하여 성능을 저하시킬 수 있다. lodashdebounce 를 이용해서 설정한 시간 안에 한번만 호출 되도록 해본다.

debounce ?

이벤트를 그룹화하여 지정한 시간이 지난 후 하나의 이벤트만 발생하도록 처리하는 기술이다.

활용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import React, { useEffect, useState, useRef } from 'react';
import { debounce } from 'lodash';

const Page = () => {

  const [width, setWidth] = useState();

  useEffect(() => {
    window.addEventListener("resize", measure);
    return () => {
      window.removeEventListener("resize", measure);
    };
  }, []);

  // debounce 를 통해 1초(1000ms)에 한번만 리렌더링 처리
  const measure = debounce(() => {
    setWidth(window.innerWidth);
  }, 1000);

  return (
    <div>width: {width}</div>
  )
}