DEV/WebProgramming

[React.js] debounce ์‚ฌ์šฉํ•˜๊ธฐ

9thxg 2024. 7. 9. 13:19

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์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ๊ณผ ์˜ต์…˜์ด ์ ์šฉ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ํ•˜๋‚˜ ๋” ์–ป์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

}