React: μ œμ–΄ 된 μž…λ ₯의 경우 null λ˜λŠ” ""둜 μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμœΌλ©΄ 단계가 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 03μ›” 06일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: facebook/react

κ³€μΆ©

ν˜„μž¬ 행동은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
μž…λ ₯ μœ ν˜• = "숫자"의 경우 초기 값이 μ„€μ •λ˜μ–΄ 있으면 단계가 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 초기 값이 ""λ˜λŠ” null 인 κ²½μš°μ—λ§Œ 단계가 μ μš©λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

예:
https://codepen.io/anon/pen/MQMBmX

이 μ˜ˆμ œμ—μ„œλŠ” μ œμ–΄ 된 μž…λ ₯ 바인딩 κ°’ 및 단계λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹¨κ³„λŠ” κ°’μ˜ 1/10μž…λ‹ˆλ‹€. ν…μŠ€νŠΈ μƒμžμ˜ 값을 50000으둜 νŽΈμ§‘ν•˜κ³  μŠ€ν…ŒνΌλ₯Ό μ‚¬μš©ν•˜μ—¬ μ¦λΆ„ν•˜λ©΄ 50100으둜 μ¦λΆ„λ©λ‹ˆλ‹€ (즉, ν˜„μž¬ 단계가 μ•„λ‹Œ 초기 κ°’λ§ŒνΌ).

초기 값이 ""λ˜λŠ” nullμ΄λ˜λ„λ‘ μ½”λ“œλ₯Ό νŽΈμ§‘ν•©λ‹ˆλ‹€. ν…μŠ€νŠΈ μƒμžλ₯Ό 50000으둜 νŽΈμ§‘ν•˜κ³  단계λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€. 값은 μ˜ˆμƒλŒ€λ‘œ 55000으둜 μ΄λ™ν•©λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?
μž…λ ₯ ꡬ성 μš”μ†Œ 값을 λ¨Όμ € null λ˜λŠ” ""둜 μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šκ³ λ„ 단계λ₯Ό λ”°λ₯΄λŠ” 숫자 μž…λ ₯을 λ Œλ”λ§ ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

제곡된 초기 κ°’μ΄μžˆμ„ λ•Œ DOM에 κ°’ 속성을 μ”λ‹ˆλ‹€ (예 : value = "100"). 초기 값이 ""λ˜λŠ” null이면 κ°’ 속성 만 할당없이 DOM에 κΈ°λ‘λ©λ‹ˆλ‹€. 예 : (κ°’).

μ–΄λ–€ λ²„μ „μ˜ React와 μ–΄λ–€ λΈŒλΌμš°μ € / OS가이 문제의 영ν–₯을 λ°›μŠ΅λ‹ˆκΉŒ?

16.3.0-alpha.1 (μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄μ΄ λ²„μ „μœΌλ‘œ 이식 됨)
0.14.7 (μ›λž˜μ΄ λ²„μ „μ—μ„œ 발견됨)

Chromeμ—λ§Œ 영ν–₯을 λ―ΈμΉ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ (확인 된 μ°½ 및 Mac, 버전 59 및 64). Safariμ—λŠ” 버그가 λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ΅œμ†Œν•œ Macμ—μ„œλŠ”).

DOM Bug

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

예. 사싀 μš°λ¦¬κ°€ 이것에 λŒ€ν•œ νƒ€μž„ 라인을 λͺ¨μ•„야할지 κΆκΈˆν•©λ‹ˆλ‹€.

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

Windows 10의 Chrome 64와 Debian의 Firefox 52 λͺ¨λ‘μ—μ„œμ΄ λ°”μ΄μ˜¬λ¦°μœΌλ‘œ 맀우 νŠΉλ³„ν•œ λ™μž‘μ„λ³΄κ³  μžˆμŠ΅λ‹ˆλ‹€. μž…λ ₯에 50000을 μž…λ ₯ν•˜κ³  μ¦‰μ‹œ μœ„μͺ½ ν™”μ‚΄ν‘œλ₯Ό ν΄λ¦­ν•˜λ©΄ 50100μ΄λ©λ‹ˆλ‹€. μž…λ ₯에 50000을 μž…λ ₯ν•˜κ³  λ¬Έμ„œμ˜ λ‹€λ₯Έ 곳을 클릭 ν•œ λ‹€μŒ μœ„μͺ½ ν™”μ‚΄ν‘œλ₯Ό ν΄λ¦­ν•˜λ©΄ 55000μ΄λ©λ‹ˆλ‹€.

값을 λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. μœ„μͺ½ ν™”μ‚΄ν‘œλ₯Ό μ—¬λŸ¬ 번 ν΄λ¦­ν•˜λ©΄ μ˜λ―Έκ°€μ—†λŠ” 숫자둜 λ³€κ²½λ˜κΈ° μ‹œμž‘ν•©λ‹ˆλ‹€.

@andyboyne λ³΄κ³ μ„œμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ¬Έμ œλŠ” ν•„λ“œκ°€ 흐렀질 λ•ŒκΉŒμ§€ 숫자 μž…λ ₯에 λŒ€ν•œ value 속성을 μ—…λ°μ΄νŠΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€. μ΄λŠ” λΈŒλΌμš°μ € μœ νš¨μ„± 검사와 κ΄€λ ¨λœ μ›μΉ˜ μ•ŠλŠ” λ™μž‘μ„ ν”Όν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•©λ‹ˆλ‹€. cc @nhunzaker.

μ œμ–΄ 된 μž…λ ₯ https://github.com/facebook/react/issues/11896에 λŒ€ν•œ value 속성 동기화λ₯Ό λ§ˆμΉ¨λ‚΄ μ€‘μ§€ν•˜λ©΄μ΄ 문제λ₯Ό ν•΄κ²°ν•΄μ•Όν•©λ‹ˆλ‹€ .

예. 사싀 μš°λ¦¬κ°€ 이것에 λŒ€ν•œ νƒ€μž„ 라인을 λͺ¨μ•„야할지 κΆκΈˆν•©λ‹ˆλ‹€.

μ§€μ³μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ 동기화 문제이며 ν•„λ“œκ°€ 흐렀지면 ν•„λ“œκ°€ λ™κΈ°ν™”λ©λ‹ˆλ‹€.
κ·Έλž˜μ„œ λ‚˜λŠ” console.logλ₯Ό μΆ”κ°€ν–ˆκ³  e.target.value와 e.target.getAttribute ( "value")λŠ” ν•„λ“œκ°€ 흐렀지지 μ•ŠλŠ” λ™μ•ˆ λ™κΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ•Œμ•„ λƒˆμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ ν•΄κ²° 방법은 e.target.setAttribute ( "value", e.target.value);λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 값을 κ°•μ œλ‘œ μ—…λ°μ΄νŠΈν•˜λ©΄ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

       onChange={e => {
        console.log("target" , e.target.value);
        console.log("getAttribute value",  e.target.getAttribute("value"));
        e.target.setAttribute("value",e.target.value); 
        this.setState({value: e.target.value, step: e.target.value / 10});
      }}

μ•„λ‹ˆμš”, 이것은 μ—¬μ „νžˆ β€‹β€‹λ¬Έμ œμž…λ‹ˆλ‹€. 그것은 μ €λ₯Ό λ―ΈμΉ˜κ²Œν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” μ—¬μ „νžˆ v16으둜 μ œμ–΄ 된 μž…λ ₯을 λ‹¨μˆœν™”ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€!

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