React: [버그] React onChange Synthetic / Proxy μ΄λ²€νŠΈκ°€ μž¬ν™œμš©λ˜κ³  있으며 ν•Έλ“€λŸ¬κ°€ λ””λ°”μš΄μŠ€λ  λ•Œ β€‹β€‹λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 09μ›” 20일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: facebook/react

ν˜„μž¬ 행동은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

0.14.7μ—μ„œ ν™•μΈλ˜μ—ˆμ§€λ§Œ 15.3.2μ—μ„œλ„ 였늘 λ°œμƒν•©λ‹ˆλ‹€.

https://jsfiddle.net/dimitar/7ktbfetb/

class Foo extends React.Component {
    render(){
    const handleChange = _.debounce(this.props.onChange, 500);
    return <input onChange={handleChange} />
  }
}

ReactDOM.render(<Foo onChange={e => console.log(e.target, e)} />, document.querySelector('div'));

e.target , null 받을 κ²ƒμœΌλ‘œ μ˜ˆμƒ

λ””λ°”μš΄μŠ€ 없이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. https://jsfiddle.net/dimitar/7ktbfetb/1/

https://github.com/facebook/react/commit/3285d834402a60d241188a1deacf8250b50239cf κ΄€λ ¨ κ°€λŠ₯μ„± - https://github.com/facebook/react/blob/master/CHANGELOG.md#react -9

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

ν•΄κ²° 방법을 μ°ΎλŠ” μ‚¬λžŒμ€ e.persist() λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ return <input onChange={e => handleChange(e.persist()||e)} />

λͺ¨λ“  3 λŒ“κΈ€

ν•΄κ²° 방법을 μ°ΎλŠ” μ‚¬λžŒμ€ e.persist() λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ return <input onChange={e => handleChange(e.persist()||e)} />

이것은 λ””λ°”μš΄μŠ€κ°€ μž‘λ™ν•˜λŠ” 방식 λ•Œλ¬Έμž…λ‹ˆλ‹€. λ‹€μŒ 이벀트 루프에 λŒ€ν•œ ν˜ΈμΆœμ„ ν‘Έμ‹œν•˜κΈ° μœ„ν•΄ setTimeout을 μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€. μ–ΈκΈ‰ν–ˆλ“―μ΄ ν’€λ§μœΌλ‘œ 인해 ReactλŠ” 이미 ν•©μ„± 이벀트λ₯Ό ν’€λ‘œ λ°˜ν™˜ν•˜κ³  ν•„λ“œλ₯Ό μž¬μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. λ¦¬μ•‘νŠΈμ˜ 이벀트 ν•Έλ“€λŸ¬ 외뢀에 μ΄λ²€νŠΈκ°€ μ‘΄μž¬ν•΄μ•Ό ν•˜λŠ” λ””λ°”μš΄μŠ€ λ˜λŠ” 기타 λ‹€λ₯Έ 것을 μ‚¬μš©ν•˜λŠ” 경우(예: 비동기 μ½”λ“œ) 지속해야 ν•©λ‹ˆλ‹€.

이것은 μ˜λ„λœ κ²ƒμ΄λ―€λ‘œ μ§€κΈˆ λ‹Ήμž₯은 이에 λŒ€ν•΄ ν•  수 μžˆλŠ” 일이 μ—†μŠ΅λ‹ˆλ‹€. #6190μ—λŠ” 잠재적으둜 풀링을 μ œκ±°ν•˜λŠ” 것에 λŒ€ν•œ λͺ‡ 가지 λ…Όμ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. 풀링은 λͺ…μ‹œμ μΈ 지속 없이 μ½”λ“œκ°€ μž‘λ™ν•˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이것은 데이터 흐름, λΆˆλ³€μ„± 및 λΆ€μž‘μš© 방지λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ„€μ •λœ λ°”λ‘œ κ·Έ λ°˜μ‘ 원리와 λ°˜λŒ€μž…λ‹ˆλ‹€. ꡬ성 μš”μ†Œμ— 개체λ₯Ό μ „λ‹¬ν•˜μ§€λ§Œ μ‹€μˆ˜λ‘œ λˆ„μΆœμ„ 생성할 수 μžˆλŠ” GC와 μ‚¬μš©μžλ₯Ό λΆˆμ‹ ν•˜κΈ° λ•Œλ¬Έμ— λ™μΌν•œ 이벀트 루프 λ‚΄μ—μ„œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μŠ€λƒ…μƒ·μΌ λΏμž…λ‹ˆλ‹€...

κ·Έ λ‹Ήμ‹œμ—λŠ” 쒋은 μƒκ°μ΄μ—ˆμ„μ§€ λͺ¨λ₯΄μ§€λ§Œ 우리 쀑 μΌλΆ€λŠ” μ μ ˆν•œ GCκ°€ κ°€λŠ₯ν•œ 에버그린 λΈŒλΌμš°μ €λ§Œ μ§€μ›ν•˜λ©΄ λ©λ‹ˆλ‹€. μ•„λ§ˆλ„ 이 μ ‘κ·Ό 방식을 μž¬κ³ ν•˜λŠ” λ™μ•ˆ ν”Œλž˜κ·Έ/ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ 풀링을 끌 수 μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰