Vue Reactive - ChoDragon9/posts GitHub Wiki

https://kr.vuejs.org/v2/guide/reactivity.html

λ°˜μ‘ν˜•μ— λŒ€ν•΄ 깊이 μ•Œμ•„λ³΄κΈ°

Vue의 κ°€μž₯ λ‘λ“œλŸ¬μ§„ νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” λˆˆμ— 잘 띄지 μ•ŠλŠ” λ°˜μ‘ν˜• μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. λͺ¨λΈμ€ λ‹¨μˆœν•œ JavaScript κ°μ²΄μž…λ‹ˆλ‹€. μˆ˜μ •ν•˜λ©΄ 화면이 κ°±μ‹ λ©λ‹ˆλ‹€. μŠ€ν…Œμ΄νŠΈ 관리λ₯Ό κ°„λ‹¨ν•˜κ³  μ§κ΄€μ μœΌλ‘œ λ§Œλ“€μ–΄μ£Όμ§€λ§Œ 곡톡점을 μ œκ±°ν•˜κΈ° μœ„ν•΄ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ΄ν•΄ν•˜λŠ” 것도 μ€‘μš”ν•©λ‹ˆλ‹€.

λ³€κ²½ λ‚΄μš©μ„ μΆ”μ ν•˜λŠ” 방법

Vue μΈμŠ€ν„΄μŠ€μ— JavaScript 객체λ₯Ό data μ˜΅μ…˜μœΌλ‘œ μ „λ‹¬ν•˜λ©΄ VueλŠ” λͺ¨λ“  속성에 Object.definePropertyλ₯Ό μ‚¬μš©ν•˜μ—¬ getter/setter둜 λ³€ν™˜ν•©λ‹ˆλ‹€. μ΄λŠ” Vueκ°€ ES5λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” IE8 μ΄ν•˜λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ΄μœ μž…λ‹ˆλ‹€.

λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€μ—λŠ” ν•΄λ‹Ή watcher μΈμŠ€ν„΄μŠ€κ°€ 있으며, 이 μΈμŠ€ν„΄μŠ€λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μ’…μ†μ μœΌλ‘œ λ Œλ”λ§λ˜λŠ” λ™μ•ˆ μˆ˜μ •λœ λͺ¨λ“  속성을 κΈ°λ‘ν•©λ‹ˆλ‹€. λ‚˜μ€‘μ— 쒅속적인 setterκ°€ 트리거 되면 watcher에 μ•Œλ¦¬κ³  μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€μ‹œ λ Œλ”λ§ λ©λ‹ˆλ‹€.

λ³€κ²½ 감지 κ²½κ³ 

μ΅œμ‹  JavaScript의 ν•œκ³„ (그리고 Object.observe의 포기)둜 인해 VueλŠ” μ†μ„±μ˜ μΆ”κ°€ 제거λ₯Ό 감지할 수 μ—†μŠ΅λ‹ˆλ‹€. VueλŠ” μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” 쀑에 getter / setter λ³€ν™˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— data 객체에 속성이 μžˆμ–΄μ•Ό Vueκ°€ 이λ₯Ό λ³€ν™˜ν•˜κ³  응닡할 수 μžˆμŠ΅λ‹ˆλ‹€.

VueλŠ” 이미 λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€μ— μƒˆλ‘œμš΄ 루트 μˆ˜μ€€μ˜ λ°˜μ‘ 속성을 λ™μ μœΌλ‘œ μΆ”κ°€ν•˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Vue.set(object, key, value) λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 쀑첩 된 객체에 λ°˜μ‘μ„± 속성을 μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜• 속성 μ„ μ–Έν•˜κΈ°

VueλŠ” 루트 μˆ˜μ€€μ˜ λ°˜μ‘μ„± 속성을 λ™μ μœΌλ‘œ μΆ”κ°€ ν•  수 μ—†μœΌλ―€λ‘œ λͺ¨λ“  루트 μˆ˜μ€€μ˜ λ°˜μ‘μ„± 데이터 속성을 빈 κ°’μœΌλ‘œλΌλ„ μ΄ˆκΈ°μ— μ„ μ–Έν•˜μ—¬ Vue μΈμŠ€ν„΄μŠ€λ₯Ό μ΄ˆκΈ°ν™”ν•΄μ•Όν•©λ‹ˆλ‹€.

이 μ œν•œ μ‚¬ν•­μ—λŠ” 기술적인 μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€.

쒅속성 좔적 μ‹œμŠ€ν…œμ—μ„œ 엣지 μΌ€μ΄μŠ€ 클래슀λ₯Ό μ œκ±°ν•˜κ³  Vue μΈμŠ€ν„΄μŠ€λ₯Ό μœ ν˜• 검사 μ‹œμŠ€ν…œμœΌλ‘œ 더 λ©‹μ§€κ²Œ λ§Œλ“­λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ½”λ“œ μœ μ§€ 관리 μΈ‘λ©΄μ—μ„œλ„ μ€‘μš”ν•œ κ³ λ € 사항이 μžˆμŠ΅λ‹ˆλ‹€. data κ°μ²΄λŠ” μ»΄ν¬λ„ŒνŠΈ μƒνƒœμ— λŒ€ν•œ μŠ€ν‚€λ§ˆμ™€ κ°™μŠ΅λ‹ˆλ‹€. λͺ¨λ“  λ°˜μ‘ 속성을 미리 μ„ μ–Έν•˜λ©΄ λ‚˜μ€‘μ— λ‹€μ‹œ λ°©λ¬Έν•˜κ±°λ‚˜ λ‹€λ₯Έ κ°œλ°œμžκ°€ 읽을 λ•Œ ꡬ성 μš”μ†Œ μ½”λ“œλ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.

비동기 κ°±μ‹  큐

VueλŠ” DOM μ—…λ°μ΄νŠΈλ₯Ό λΉ„λ™κΈ°λ‘œ ν•©λ‹ˆλ‹€. 데이터 변경이 발견 될 λ•Œλ§ˆλ‹€ 큐λ₯Ό μ—΄κ³  같은 이벀트 λ£¨ν”„μ—μ„œ λ°œμƒν•˜λŠ” λͺ¨λ“  데이터 변경을 버퍼에 λ‹΄μŠ΅λ‹ˆλ‹€. 같은 Watcherκ°€ μ—¬λŸ¬ 번 λ°œμƒν•˜λ©΄ λŒ€κΈ°μ—΄μ—μ„œ ν•œ 번만 ν‘Έμ‹œλ©λ‹ˆλ‹€. 이 λ²„νΌλ§λœ μ€‘λ³΅μ˜ μ œκ±°λŠ” λΆˆν•„μš”ν•œ 계산과 DOM μ‘°μž‘μ„ ν”Όν•˜λŠ” 데 μžˆμ–΄ μ€‘μš”ν•©λ‹ˆλ‹€. κ·Έ λ‹€μŒ, 이벀트 루프 β€œtickβ€μ—μ„œ VueλŠ” λŒ€κΈ°μ—΄μ„ λΉ„μš°κ³  μ‹€μ œ (이미 쀑볡 제거 된) μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.