_.debounce()
addEventListener
๋ฅผ ์ฌ์ฉํ ๋ event.currentTarget
์(๋ฅผ) ์ป์ ์ ์์ต๋๋ค.
์ฌ๊ธฐ ๋ฐ์ด์ฌ๋ฆฐ์ด ์์ต๋๋ค.
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);
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jridgewell React onChange์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๋ค. ๋๋ฐ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด onChange ํจ์์์ ์ ์ ํ ์ด๋ฒคํธ์ ์ก์ธ์คํ ์ ์์ง๋ง
_.debounce
๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ํevent
๋ฅผ ์๊ฒ ๋ฉ๋๋ค. โ ์๋ ์ฐธ์กฐ