const debounce ์ฌ์ฉํ๊ธฐ = ( Param ) => {
๐ป return Result;
import _ from "lodash";
import React, { useMemo } from "react";
// state์ ์ํด ํ์ด์ง๊ฐ ๋ค์ ๋ ๋๋ง ๋์์ ๋ debounce๊ฐ ์ด๊ธฐํ ๋๋ฏ๋ก ์ ์์ ์ธ ๋์ X
// ๋ฐ๋ผ์ Memoization ํ์
const debounceFunc = useMemo(
() =>
_.debounce(
() => {
// debounce ์ฒ๋ฆฌํ ํจ์
},
// ์๊ณ์๊ฐ(ms): debounce ์ฒ๋ฆฌํ ์๊ฐ๊ฐ๊ฒฉ
300,
// leading: ํจ์๊ฐ ํธ์ถ๋์ ๋ ํจ์ ์คํ
// trailing: ๋ง์ง๋ง์ผ๋ก ํจ์๊ฐ ํธ์ถ๋ ํ ์๊ณ์๊ฐ ๋งํผ ์ง๋๋ฉด ํจ์ ์คํ
// defualt: leading=false, trailing=true
{ leading: false, trailing: true }
),
[]
);
๐ console.log( history )
๋ํ ๋๊ธฐ๋ค๋ผ๋ฆฌ ๋ชจ์ฌ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ด๋ค. ์๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ง์๊ณผ ๊ธฐ์ ์ ๊ณต์ ํ๋ค ๋ณด๋ ์ฌ๋ฌ ์ ๋ณด๋ค์ ์ป์ ์ ์์๋ค. ๊ทธ์ค ํ๋๊ฐ debounce์ด๋ค.
ํ์ฌ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๊ฐ ์ ์ ์ ์ ๋ ฅ์ ๋ํ ๊ฒ์ฆ์ api๋ฅผ ํตํด ์งํํ์ด์ผ ํ๋ค. ์ ๋ ฅ ์ ๊ณ์ api ํธ์ถํ๋ ๊ฒ์ ๋ถํ์ํ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ ๊ณ ๋ฏผํ๋ค๊ฐ debounce์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ์๊ฐ์ด ๋ฌ๋ค.
์ง์ debounce๋ฅผ ๊ตฌํํ ์๋ ์์ง๋ง lodash ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ณ ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ debounce๋ฅผ ์ฌ์ฉํ๋ค. ์ ์ ๊ฐ ์ ๋ ฅ ์ค์๋ ์๊ณ์๊ฐ ๋ด์ ํจ์๊ฐ ํธ์ถ๋๊ธฐ ๋๋ฌธ์ ์ ์ ๊ฐ ์ ๋ ฅ์ ์ด๋ ์ ๋ ์๋ฃํ์ ๋ api ํธ์ถํ๋๋ก ํ ์ ์์๋ค.
๋ค๋ง ์ฒ์์ ์ ์ฉํ์ ๋ ์์ํ ๋๋ก ๋์ํ์ง ์์๋ค. ์ ์ ๊ฐ ์ ๋ ฅ์ ํ๋ค๋ฉด state๊ฐ ๋ณ๊ฒฝ๋์ด ํด๋น ์ปดํฌ๋ํธ๊ฐ ์๋ก ๋ ๋๋ง ๋๋ ๊ฒ์ด๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋๋ฉด์ debounce ํจ์๋ ์ด๊ธฐํ๋์ด ์ ์์ ์ธ ๋์์ ํ์ง ์์๋ค. ๊ทธ๋์ useMemo๋ฅผ ํตํด Memoization์ ํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋๋๋ผ๋ debounce ํจ์๊ฐ ์ด๊ธฐํ๋๋ ๊ฒ์ ๋ง์๋ค.
๋ง์ฝ debounce ๊ฐ๋ ์ ๋ชจ๋ฅด๋ ์ํ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค ํ์ผ๋ฉด ๋น์ฉ์ ๋ง์ด ์๋นํ์ ๊ฒ ๊ฐ๋ค. ์ฌ์ด๋ ํ๋ก์ ํธ์์ ์ ๋ณด๋ฅผ ์๋ ค์ค ๋๊ธฐ์๊ฒ ๊ฐ์ฌํจ์ ๋๋๋ค.
์ต๊ทผ ํ์ฌ์์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ธ๋ฐ ํด๋น ํ๋ก์ ํธ์์๋ ํจ์ ํธ์ถ์ ๋ํ ์ต์ ํ๊ฐ ํ์ํ์ฌ debounce๋ฅผ ์ฌ์ฉํ๋ค. ๋น์ทํ ๋ค๋ฅธ ๋ถ๋ถ์์๋ ์ต์ ํ๊ฐ ํ์ํ๋ค๋ฉด debounce ๊ฐ๋ ์ ๋์ ํด ๋ณด๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ๋ค.
/ / Improvements
debounce์ ๋น์ทํ ์ต์ ํ ๋ฐฉ์์ผ๋ก throttle์ด ์๋ค. throttle์ ํจ์๊ฐ ์ฌ๋ฌ ๋ฒ ํธ์ถ๋๋ฉด ์๊ณ์๊ฐ๋ง๋ค ํธ์ถํ๋ ๋ฐฉ์์ด๋ค. debounce์ ์ต์ ์ ๋น์ทํ์ง๋ง leading๊ณผ trailing ๋์์ด ๋ค๋ฅด๋ค.
throttle์ ํตํด ํด๊ฒฐํ ์ ์๋ ์ํฉ๊ณผ ์ต์ ์ด ์ ์ฉ๋๋ ๋ฐฉ์์ ๋ํด ์ดํดํ ์ ์์ผ๋ฉด ์ต์ ํ ๋ฐฉ๋ฒ์ ํ๋ ๋ ์ป์ด๊ฐ ์ ์์ ๊ฒ ๊ฐ๋ค.
}
'DEV > WebProgramming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React.js] React-Table getGroupedRowModel() ์ค๋ฅ (0) | 2024.09.18 |
---|---|
[React.js] ๋น๋ ํ ํ๊ฒฝ๋ณ์ ์์ (0) | 2024.07.12 |
[JavaScript] ์ฌ์ฉ์ ์คํฌ๋กค ๋ง๊ธฐ ๋ฐ ์คํฌ๋กค ์ฌ๋ฐฑ ์ฒ๋ฆฌ (0) | 2024.04.20 |
[React.js] ์์ ๋ก๊ทธ์ธ ๊ตฌํ - ์นด์นด์ค (0) | 2023.04.28 |
[React.js] Viewport์ ๋์ ์ผ๋ก meta ํ๊ทธ ์์ ํ๊ธฐ (0) | 2023.01.31 |