React: κ³ μœ ν•œ 'ν‚€'κ°€ μžˆλŠ” λͺ©λ‘ ν•­λͺ©μ€ ν•­λͺ© μˆœμ„œκ°€ λ³€κ²½λ˜λ©΄ λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€.

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

κΈ°λŠ₯ 을 μš”μ²­ν•˜κ±°λ‚˜ 버그λ₯Ό 보고 ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?
벌레

ν˜„μž¬ 행동은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
key λ₯Ό 각 item μš”μ†Œμ— κ³ μœ ν•œ μ†μ„±μœΌλ‘œ μ„€μ •ν•˜μ—¬ ν•­λͺ© λͺ©λ‘μ„ λ Œλ”λ§ν•  λ•Œ 이전 λ Œλ”λ§μ—μ„œ ν•­λͺ© μˆœμ„œκ°€ λ³€κ²½λ˜λ©΄ μΈλ±μŠ€κ°€ λ³€κ²½λœ ν•­λͺ© μš”μ†Œκ°€ λ‹€μ‹œ λ Œλ”λ§λ˜μ§€ μ•Šκ³  λ‹€μ‹œ λ Œλ”λ§(μƒˆ μΈμŠ€ν„΄μŠ€ 생성)λ©λ‹ˆλ‹€. -κΈ°μ‘΄ μΈμŠ€ν„΄μŠ€ μ‚¬μš©(ν‚€λ₯Ό 톡해 맀핑됨).

예λ₯Ό λ“€μ–΄ https://codesandbox.io/s/r5p48kzop
id , top , left & color μ†Œν’ˆμ΄ μžˆλŠ” 각 μƒμžλ‘œ boxes λͺ©λ‘μ„ λ Œλ”λ§ν•©λ‹ˆλ‹€. 750ms λ§ˆλ‹€ boxes λ°°μ—΄ λ‚΄μ˜ λͺ¨λ“  μš”μ†Œμ— λŒ€ν•œ ( top , left ) 값을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈν•˜λŠ” λ™μ•ˆ μš”μ†Œμ˜ μˆœμ„œκ°€ λ³€κ²½λ˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  μƒμžκ°€ μƒˆ μœ„μΉ˜λ‘œ μ• λ‹ˆλ©”μ΄μ…˜λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μƒμžλ₯Ό μ„žλŠ” 31ν–‰μ˜ 주석을 제거 ν•˜λ©΄ 이전 λ Œλ”λ§μ—μ„œ μœ„μΉ˜λ₯Ό μœ μ§€ν•˜λŠ” μš”μ†Œλ§Œ μƒˆ μœ„μΉ˜λ‘œ μ• λ‹ˆλ©”μ΄μ…˜λ©λ‹ˆλ‹€.

μƒŒλ“œλ°•μŠ€μ—μ„œ 이 λ™μž‘μ„ κ΄€μ°°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. _shuffle λ₯Ό 켜면 μƒμžκ°€ μƒˆ μœ„μΉ˜λ‘œ μ ν”„ν•˜λŠ” 반면 _shuffle κΊΌμ Έ 있으면 항상 μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ μš©λ©λ‹ˆλ‹€.

ν˜„μž¬ λ™μž‘μ΄ 버그인 경우 μž¬ν˜„ν•˜λŠ” 단계와 κ°€λŠ₯ν•œ 경우 λ¬Έμ œμ— λŒ€ν•œ μ΅œμ†Œν•œμ˜ 데λͺ¨λ₯Ό μ œκ³΅ν•˜μ„Έμš”. μ•„λž˜μ˜ JSFiddle(https://jsfiddle.net/Luktwrdm/) λ˜λŠ” CodeSandbox(https://codesandbox.io/s/new) μ˜ˆμ œμ— λŒ€ν•œ 링크λ₯Ό λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€.
https://codesandbox.io/s/r5p48kzop

μ˜ˆμƒλ˜λŠ” λ™μž‘μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?
boxes 의 μˆœμ„œμ— 관계없이 λͺ¨λ“  μƒμž μš”μ†ŒλŠ” κ³ μœ ν•œ key 속성이 μ„€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ μƒˆ μœ„μΉ˜μ— μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ–΄λ–€ λ²„μ „μ˜ React와 μ–΄λ–€ λΈŒλΌμš°μ €/OSκ°€ 이 문제의 영ν–₯을 λ°›λ‚˜μš”?
λ°˜μ‘ 16.3.2 & 16.4.1 , Chrome, MacOS.

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

μ•ˆλ…•ν•˜μ„Έμš” @dhruvparmar372μž…λ‹ˆλ‹€!

이것은 DOM의 ν•œκ³„μΈ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό 보여주기 μœ„ν•΄ 두 DOM λ…Έλ“œμ˜ μˆœμ„œλ₯Ό λ³€κ²½ν•œ λ‹€μŒ μ „ν™˜μ„ νŠΈλ¦¬κ±°ν•˜λŠ” 클래슀λ₯Ό μ μš©ν•˜λŠ” 이 JSFiddle 을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

μˆœμ„œλ₯Ό λ³€κ²½ν•˜κ³  μ• λ‹ˆλ©”μ΄μ…˜ 속성을 μ—…λ°μ΄νŠΈν•˜λŠ” 사이에 λ¦¬ν”Œλ‘œμš° λ₯Ό νŠΈλ¦¬κ±°ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<Box /> λ₯Ό 클래슀 ꡬ성 μš”μ†Œλ‘œ λ³€κ²½ν•˜κ³  μƒμ„±μžμ—μ„œ 고유 IDλ₯Ό μƒμ„±ν•˜μ—¬ React에 μ˜ν•΄ ꡬ성 μš”μ†Œκ°€ λ‹€μ‹œ 생성될 λ•Œ CodeSandbox에 μ•½κ°„μ˜ μ½”λ“œλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ³΄μ‹œλ‹€μ‹œν”Ό IDλŠ” μΌκ΄€λ˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€. https://codesandbox.io/s/jn42wvl343

κ·Έ 외에도 μ—…λ°μ΄νŠΈλ₯Ό 두 개의 setState 둜 λΆ„ν• ν•˜μ—¬ μ˜ˆμ œμ— λ¦¬ν”Œλ‘œμš° ν•΄κ²° 방법을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. 첫 λ²ˆμ§ΈλŠ” μˆœμ„œλ₯Ό λ³€κ²½ν•œ λ‹€μŒ λ¦¬ν”Œλ‘œμš°λ₯Ό νŠΈλ¦¬κ±°ν•˜κ³  λ‚˜μ€‘μ— μœ„μΉ˜λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. 이것은 Chrome, Firefox, Safari 및 Edgeμ—μ„œ μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(CodeSandboxλŠ” IE11을 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•΄λ‹Ή λΈŒλΌμš°μ €μ—μ„œ ν…ŒμŠ€νŠΈν•  수 μ—†μŒ).

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

μ•ˆλ…•ν•˜μ„Έμš” @dhruvparmar372μž…λ‹ˆλ‹€!

이것은 DOM의 ν•œκ³„μΈ 것 κ°™μŠ΅λ‹ˆλ‹€. 이λ₯Ό 보여주기 μœ„ν•΄ 두 DOM λ…Έλ“œμ˜ μˆœμ„œλ₯Ό λ³€κ²½ν•œ λ‹€μŒ μ „ν™˜μ„ νŠΈλ¦¬κ±°ν•˜λŠ” 클래슀λ₯Ό μ μš©ν•˜λŠ” 이 JSFiddle 을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

μˆœμ„œλ₯Ό λ³€κ²½ν•˜κ³  μ• λ‹ˆλ©”μ΄μ…˜ 속성을 μ—…λ°μ΄νŠΈν•˜λŠ” 사이에 λ¦¬ν”Œλ‘œμš° λ₯Ό νŠΈλ¦¬κ±°ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<Box /> λ₯Ό 클래슀 ꡬ성 μš”μ†Œλ‘œ λ³€κ²½ν•˜κ³  μƒμ„±μžμ—μ„œ 고유 IDλ₯Ό μƒμ„±ν•˜μ—¬ React에 μ˜ν•΄ ꡬ성 μš”μ†Œκ°€ λ‹€μ‹œ 생성될 λ•Œ CodeSandbox에 μ•½κ°„μ˜ μ½”λ“œλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ³΄μ‹œλ‹€μ‹œν”Ό IDλŠ” μΌκ΄€λ˜κ²Œ μœ μ§€λ©λ‹ˆλ‹€. https://codesandbox.io/s/jn42wvl343

κ·Έ 외에도 μ—…λ°μ΄νŠΈλ₯Ό 두 개의 setState 둜 λΆ„ν• ν•˜μ—¬ μ˜ˆμ œμ— λ¦¬ν”Œλ‘œμš° ν•΄κ²° 방법을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. 첫 λ²ˆμ§ΈλŠ” μˆœμ„œλ₯Ό λ³€κ²½ν•œ λ‹€μŒ λ¦¬ν”Œλ‘œμš°λ₯Ό νŠΈλ¦¬κ±°ν•˜κ³  λ‚˜μ€‘μ— μœ„μΉ˜λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. 이것은 Chrome, Firefox, Safari 및 Edgeμ—μ„œ μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(CodeSandboxλŠ” IE11을 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•΄λ‹Ή λΈŒλΌμš°μ €μ—μ„œ ν…ŒμŠ€νŠΈν•  수 μ—†μŒ).

μ•ˆλ…•ν•˜μ„Έμš” @philipp-spies λ¬Έμ œμ™€ ν•΄κ²° 방법에 λŒ€ν•œ 예λ₯Ό λͺ…ν™•νžˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, @philipp-spies

λͺ©λ‘ μ •λ ¬κ³Ό 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€ πŸ˜”
λΆˆν–‰νžˆλ„ μœ„μ˜ Codesandbox μ˜ˆμ œλŠ” 더 이상 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(

λ‹€μŒμ€ μ˜ˆμž…λ‹ˆλ‹€.
https://jsfiddle.net/9odLvbrx/
κ°„λ‹¨ν•œ CSS μ „ν™˜μœΌλ‘œ 클릭 μ‹œ ν•­λͺ©μ„ μ •λ ¬ν•©λ‹ˆλ‹€.
λ¬Έμ œλŠ” μ „ν™˜μ΄ μ„ νƒν•œ ν•­λͺ©μ—λ§Œ λ‚˜νƒ€λ‚˜κ³  λ‚˜λ¨Έμ§€ ν•­λͺ©μ€ μƒλž΅λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 μ•Œκ³  μžˆμ§€λ§Œ(μ½”λ“œμ— 주석 처리됨) ν•­λͺ© μˆ˜λŸ‰μ΄ μ ˆλŒ€ λ³€κ²½λ˜μ§€ μ•ŠλŠ” λͺ©λ‘μ—μ„œλ§Œ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. λ”°λΌμ„œ ν•­λͺ©μ„ μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜λ €λ©΄ ν•­λͺ©μ΄ μ—„μ²­λ‚˜κ²Œ λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€. λ¦¬ν”Œλ‘œμš° κ³ΌλΆ€ν•˜ μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜μ—¬ λ‚΄ μ˜ˆμ—μ„œ λ°œμƒν•˜λ„λ‘ ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! 😊

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