Underscore: __.debounce()๋Š” event.currentTarget์„ ์žƒ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2014๋…„ 10์›” 23์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jashkenas/underscore

_.debounce() addEventListener ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ event.currentTarget ์„(๋ฅผ) ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋ฐ”์ด์˜ฌ๋ฆฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@jridgewell React onChange์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฐ”์šด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด onChange ํ•จ์ˆ˜์—์„œ ์ ์ ˆํ•œ ์ด๋ฒคํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ _.debounce ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ ์ ˆํ•œ event ๋ฅผ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. โ€“ ์•„๋ž˜ ์ฐธ์กฐ

// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
    // undefined on event.target, get lodash event not <input/> event target
    const note = event.target.value
    this.sendNote({ note })
 }

๋ชจ๋“  8 ๋Œ“๊ธ€

Underscore ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ด๋ฒคํŠธ ๊ฐœ์ฒด ์ฐธ์กฐ์—์„œ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ. jQuery์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ ์—†์ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ํ•ฉ์„ฑ ์ด๋ฒคํŠธ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. event ๋Š” DOM์„ ์ „ํŒŒํ•  ๋•Œ ์žฌ์‚ฌ์šฉ๋˜๋ฉฐ currentTarget ๋Š” ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์žˆ๋Š” ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๊นก๊นก์ด

๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊นก๊นก์ด

var debounced = _.debounce(fn, 50);
document.querySelector('.debounced-input').addEventListener('keyup', function(event) {
    debounced(event, event.currentTarget);
});

์˜ˆ, ์ด๊ฒƒ์€ ๋ฐ‘์ค„์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. gator ์™€ ๊ฐ™์€ DOM ์ด๋ฒคํŠธ ๋งˆ์ดํฌ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์Œ์€ jQuery์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค .

currentTarget ๊ฐ€ this ์™€ ํ•จ๊ป˜ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์š”์†Œ๋ฅผ ์—ฌ์ „ํžˆ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‹ค์ œ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

@jridgewell React onChange์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฐ”์šด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด onChange ํ•จ์ˆ˜์—์„œ ์ ์ ˆํ•œ ์ด๋ฒคํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ _.debounce ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ ์ ˆํ•œ event ๋ฅผ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. โ€“ ์•„๋ž˜ ์ฐธ์กฐ

// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
    // undefined on event.target, get lodash event not <input/> event target
    const note = event.target.value
    this.sendNote({ note })
 }

๋‚ด ๋‘ ๋ฒˆ์งธ ์ œ์•ˆ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ๊ตฌํ˜„์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋ฅผ ์ง€์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. onChange๋Š” ์ง€์†์„ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ์ง€์† ์ด๋ฒคํŠธ๋ฅผ ๋””๋ฐ”์šด์Šค ์ฒ˜๋ฆฌ๊ธฐ์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

onChange_persist = (e) =>
{
    e.persist();
    e.onChange_debounced(e);
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

githublyp picture githublyp  ยท  3์ฝ”๋ฉ˜ํŠธ

arieljake picture arieljake  ยท  4์ฝ”๋ฉ˜ํŠธ

Francefire picture Francefire  ยท  5์ฝ”๋ฉ˜ํŠธ

zackschuster picture zackschuster  ยท  5์ฝ”๋ฉ˜ํŠธ

marcalj picture marcalj  ยท  5์ฝ”๋ฉ˜ํŠธ