π ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠ±ΡΡΠ½ΠΎ Vue ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ Β«Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈΒ».ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π΅Π³ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΠΌΡ ΠΈ ΡΡΠ½ΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈ ΠΌΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ Π·Π½Π°Π΅ΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Vue Π΄Π΅Π»Π°Π΅Ρ Π΄Π»Ρ Π½Π°Ρ Π·Π° ΡΡΠΈΠΌ.
Vue ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΡΠΈΠΊΡ, ΠΌΡ Π²Π²ΠΎΠ΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΈ ΠΎΠ½ Π΄Π°Π΅Ρ Π½Π°ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Vue ΡΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ Π·Π° Π½Π°Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π»ΠΈΡΠΎΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ, ΠΊΡΠΎ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ», ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ ΠΈ Ρ. Π΄. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΡΠΎ Π²ΡΠ΅ ΡΠΏΡΡΡΠ°Π½ΠΎ Π²Π½ΡΡΡΠΈ ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ, Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅.
ΠΡΠ°ΠΊ, Ρ Ρ ΠΎΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Vue Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ.
Π‘ΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΌΡ ΡΠ°ΡΡΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° Π»ΠΈΡΠ½ΠΎΠΌ ΠΎΠΏΡΡΠ΅ ΠΈ Π»ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ, ΠΈ ΡΡΠ°ΡΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΡΠ»Π°Π΄ΠΊΡ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π°ΠΌ Π½Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π΄Π΅ΡΠ°Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Vue.
πΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ²
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Vue, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ:
- Π‘Π½Π°ΡΠ°Π»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Vue, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΠΉΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
- ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
- ΠΠ΄Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΠΎΠΏΡΠΎΡΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ:
- ΠΠ°ΠΊΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Vue
- ΠΡΠΈΠ²Π΅Π΄ΡΡ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ?
- ΠΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ
π‘ ΠΠΎΠΏΡΠΎΡ
Q1. Π― Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Vue (ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΏ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ)
ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Vue Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
const options = {
props: ...,
data: ...,
computed: ...,
watch: ...,
methods: ...,
created: ...,
mounted: ...
}
new Vue(options).$mount('#app')
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ Π·Π½Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΠ½ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Vue Π² ΡΡΠΎΠΌ Β«Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌΒ» ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΌΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ ΡΠ΅ΡΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π°ΠΆΠ½ΡΡ Β«ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΒ», ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΡΡΠΎ ΠΏΡΠΈΠ½Π΅ΡΠ΅Ρ ΡΡΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΈΠ· Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π²new Vue(opions)Π ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΡΠΎ Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠ° Vue, Vue Π±ΡΠ΄Π΅Ρ Β«ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΒ» ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈprops,methods,data,computed,watchΠΡΠ½ΡΡΠ΅ Π΅Π³ΠΎ, Π·Π°ΡΠ΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ$mount('#app)ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π½Π°Ρ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄.
ΠΠ½Π°Ρ ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:
- ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΡΠ°ΡΠ°Ρ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ , ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ , Π±ΡΠ»ΠΎ Π»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ?
- ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠ°ΡΠΎΠ² Π² ΡΠ°ΠΉΠ»Π΅ created Π²ΡΠ·ΠΎΠ²Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠΎΠ²? ΠΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ?
- ...ΠΆΠ΄ΠΈΡΠ΅ Π²ΠΎΠΏΡΠΎΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ
Q2.ΠΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π²ΡΡΡΠΏΠ°ΡΡ Π² ΡΠΈΠ»Ρ (Π²ΡΠΎΡΠΎΠΉ ΡΠΈΠΏ Π²ΠΎΠΏΡΠΎΡΠ°)
ΠΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½Π΅ΠΌΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΡΡΠΎ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅, Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
<template>
<div>
<p>{{lib}}</p>
<p>{{detail.version}}</p>
<p>{{detail.type}}</p>
</div>
</template>
export default {
data() {
return {
lib: 'vue',
detail: {
version: '2.5.1',
// type: 'fe'
}
}
},
mounted() {
this.detail.type = 'fe'
}
}
// θΎεΊ
vue
2.5.1
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π»Π΅Π³ΠΊΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡ ΡΠΈΠΏΠ° Π² Π΄Π°Π½Π½ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΠ° ΡΠΈΠΏΠ° Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ (ΡΠΎ Π΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° Π² Π³Π΅ΡΡΠ΅Ρ ΠΈ ΡΠ΅ΡΡΠ΅Ρ ), ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡΠ΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½, ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠ°Π»Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ΄:
// ζmountedζΉζcreated
created() {
this.detail.type = 'fe'
}
ΠΡ Π½Π°ΡΠ»ΠΈ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ, Π΄Π°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ Π΄Π°, ΠΏΡΠΈΡΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π°, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΡΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠΌ. ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΏΠΎΡΠ»Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½ΠΎ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π΄Π°Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½Π°Ρ Π½Π΅ ΡΠΎΠ±Π»ΡΠ΄Π°ΠΉΡΠ΅ ΡΠΈΠΏ ΡΠ²ΠΎΠΉΡΡΠ², ΡΠΎ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠΎ ΡΠΎΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΡΡΠΊΠΎΠ²ΡΠΌ ΡΠΏΡΡΠΊΠΎΠΌ, Π½ΠΎ Π΄Π°Π½Π½ΡΠ΅ ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠΈΠΏΠ° Π°ΡΡΠΈΠ±ΡΡΠ° Π½ΠΈΡΠ΅Π³ΠΎ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ½ΠΎΠ²Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ:
created() {
this.detail.type = 'fe'
},
mounted() {
this.detail.type = 'be'
}
ΠΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ be ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ fe, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄.
ΠΠ΄Π½ΠΈΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ: ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ .
Q3: ΠΠ°ΠΊ Vue ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (ΡΡΠ΅ΡΠΈΠΉ ΡΠΈΠΏ Π²ΠΎΠΏΡΠΎΡΠ°)
ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ, Π½ΠΎ Π²ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²:
- ΠΠ°ΠΊ ΡΠΎΡΠ½ΠΎ ΡΡΠ΄ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ°ΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·
- ΠΠΎΠ³Π΄Π° Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ
- Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ $nextTick ΠΈ setTimeou
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ,Π‘ΡΡΡ Vue Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Ρ ΠΎΡΠΎΡΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ., ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Vue, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π΅ Π²Π΅ΡΠΈ:
- ΡΠ°ΠΌ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ Vue
Π¦ΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π·Π°Π΄Π°Ρ ΠΈ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°Ρ, Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ Vue Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΌΡΡΠ»ΠΈ Π°Π²ΡΠΎΡΠ° ΠΈ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΈΠΆΠ΅ ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
Q3-1: ΠΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ°ΡΠΎΠ²
export default {
data() {
return {
lib: 'vue',
lock: true
}
},
watch: {
lib(val, old) {
if(this.lock) {
console.log(`lib changed from ${old} to ${val}`)
}
}
},
created() {
this.lock = false;
this.lib = 'react'
this.lock = true;
}
}
// θΎεΊ
lib changed from vue to react
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π½Π°ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΠΎΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌthis.lib = 'reactΠ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π»ΠΎΠΆΠ½Π°Ρ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ. ΠΠ΄Π΅ΡΡ Π΅ΡΡΡ Β«Π»ΠΎΠ²ΡΡΠΊΠ°Β», ΡΠΎ Π΅ΡΡΡ ΠΌΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ Π΄ΡΠΌΠ°Π΅ΠΌ, ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Vue ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΌ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Vue Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΡ
Π²Π΅ΡΠ΅ΠΉ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π·Π΄Π΅ΡΡ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Q1, Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΠΊΠΎΠ²Π°:
- Π‘Π½Π°ΡΠ°Π»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ΄Π°Π»ΠΈΡΠ΅ Π΄Π²Π° Π°ΡΡΠΈΠ±ΡΡΠ° lib ΠΈ lock ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΠΉΡΠ΅
- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΡΠ°ΡΡ, ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡΠ΅ ΠΊΠ»ΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° lib (Ρ.Π΅. ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π² Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π°ΡΡΠΈΠ±ΡΡΠ° lib ΠΈ ΠΎΠΆΠΈΠ΄Π°Ρ Β«ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈΒ» Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ.Π ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π΅Π΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ.
this.lock = false, ΡΡΠΎ Π½ΠΈ Π½Π° ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ. ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡthis.lib = 'react', Π ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Vue ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
update () {
queueWatcher(this)
}
ΠΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ, ΡΡΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΡΠ°Π·Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, Π° ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π» queueWatcher:
flushing = false
waiting = false
export function queueWatcher (watcher) {
if (!flushing) {
queue.push(watcher)
}
// queue the flush
if (!waiting) {
waiting = true
// flushSchedulerQueuehδΌδΎζ¬‘ζqueueδΈηwatcherζΏεΊζ₯ζ§θ‘
nextTick(flushSchedulerQueue)
}
}
ΠΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΠ±ΡΠΎΡΠ° ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ Π»ΠΎΠΆΠ½ΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ΄ Β«ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΈΠ³Π³Π΅ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡΒ» Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
queue.push(watcher)
nextTick(flushSchedulerQueue)
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² nextTick (ΠΎ nextTick ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ setTimeout), ΠΈ ΠΆΠ΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ,this.lock = trueΠ£ΠΆΠ΅ ΠΊΠ°Π·Π½ΠΈΠ»ΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠ΅ΡΠ°Π΅ΠΌΡΡ.
Π Π΅Π·ΡΠΌΠ΅: ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ Vue, ΡΠΎ Π΅ΡΡΡ ΠΎΡΠ²Π΅Ρ, Π²ΡΠ·Π²Π°Π½Π½ΡΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² Vue, Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΏΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠΎΠΏΡΠΎΡ 3-2. ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΈΠΊΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Vue.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Π΄Π°Π½Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΊΠ»Π° ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π°Ρ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, ΠΈ ΡΠ°ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π·Π°Π΄Π°Ρ.Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡΠ½ΠΎ Π·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠΈ ΡΠ°ΡΡ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΈ ΠΊΠ°ΠΊΠΎΠ²ΠΎ Π½Π°ΡΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅.ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.
Q3-2-1: ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ
export default {
data() {
return {
lib: 'vue'
}
},
watch: {
lib(val, old) {
console.log(`lib changed from ${old} to ${val}`)
}
},
created() {
this.lib = 'react'
this.lib = 'angular'
}
}
// θΎεΊ
lib changed from vue to angular
ΠΡΡΡ Π΄Π²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
- ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·
- ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ³Π»ΠΎΠ²Π°ΡΡΠΉ
Π₯ΠΎΡΡ ΡΡΠΎ Π³Π»ΡΠΏΡΠΉ Π²ΠΎΠΏΡΠΎΡ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΏΠ½ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Π»ΡΠ±ΠΆΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Q3-1, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π² watch ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
lib. ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅this.lib = 'react', Π ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΡΠ΅Ρ lib, ΠΈ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ, ΠΈ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ.ΠΠ΅ΡΠΎΠ΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ queueWatcher.Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ:
/**
* Push a watcher into the watcher queue.
* Jobs with duplicate IDs will be skipped unless it's
* pushed when the queue is being flushed.
*/
export function queueWatcher (watcher: Watcher) {
const id = watcher.id
// hasη»΄ζηζζwatcherηid
if (has[id] == null) {
has[id] = true
if (!flushing) {
queue.push(watcher)
} else {
...
}
// queue the flush
if (!waiting) {
waiting = true
nextTick(flushSchedulerQueue)
}
}
}
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π΅ΡΡΡif (has[id] == null)Π‘ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ Π½Π°ΡΠΈ ΡΠ°ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°ΡΡΠΈΠ±ΡΡ lib, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π²ΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈthis.lib = 'angular'Π ΡΠΎ Π²ΡΠ΅ΠΌΡ queueWatcher ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π».
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π΄Π²Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΈΠΊΠ»Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ.
Q3-2-2 ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² setTimeout
export default {
data() {
return {
lib: 'vue'
}
},
watch: {
lib(val, old) {
console.log(`lib changed from ${old} to ${val}`)
}
},
created() {
setTimeout(() => {
this.lib = 'react'
}, 0)
setTimeout(() => {
this.lib = 'angular'
}, 0)
}
}
// θΎεΊ
lib changed from vue to react
lib changed from react to angular
ΠΠΎΡΠ΅ΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ? ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π· Π½Π° ΠΌΠ΅ΡΠΎΠ΄ queueWatcher:
export function queueWatcher (watcher: Watcher) {
const id = watcher.id
// hasη»΄ζηζζwatcherηid
if (has[id] == null) {
has[id] = true
if (!flushing) {
queue.push(watcher)
} else {
...
}
// queue the flush
if (!waiting) {
waiting = true
nextTick(flushSchedulerQueue)
}
}
}
Π’Π°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ flushSchedulerQueue
/**
* Flush both queues and run the watchers.
*/
function flushSchedulerQueue () {
flushing = true
let watcher, id
...
// do not cache length because more watchers might be pushed
// as we run existing watchers
for (index = 0; index < queue.length; index++) {
watcher = queue[index]
if (watcher.before) {
watcher.before()
}
id = watcher.id
has[id] = null
watcher.run()
...
}
...
}
ΠΠΎΠ³Π΄Π° Vue Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π΄Π²Π° setTimeouts, Π° setTimeout β ΡΡΠΎ Π·Π°Π΄Π°ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π²Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ setTimeout Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π΄Π²ΡΡ ΡΠΈΠΊΠ»Π°Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
- ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π΄Π°ΡΠ°): ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ vue, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ Π΄Π²Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ setTimeout
- Π’ΡΠ΅ΡΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π²ΡΠΎΡΠΎΠ³ΠΎ setTimeout
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ queueWatcher, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΊΡΡΠΈΠΉ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Ρ Π±ΡΠ» ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈ ΠΆΠ΄Π°Π» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ nextTick, Π° nextTick Π±ΡΠ» ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ΅ΠΉ. , ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ°Π» ΡΠ°ΠΊΠΈΠΌ:
- ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ): ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ vue, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ Π΄Π²Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ setTimeout
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ°):
nextTick(flushSchedulerQueue)ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ watcher.run (ΡΠΎ Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ) ΠΈ ΠΎΡΠΈΡΡΠΈΡΠ΅ has[id] - Π’ΡΠ΅ΡΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π²ΡΠΎΡΠΎΠ³ΠΎ setTimeout
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π ΡΠΈΠΊΠ»Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ js ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΠ΅ ΠΊΠΎΠ΄Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ° Π±ΡΠ΄Π΅Ρ Π²Π·ΡΡΠ° ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΌΠ°ΠΊΡΠΎΠ·Π°Π΄Π°Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ½ΡΡΠ΅ Π²ΡΠ΅ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠΈ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°Ρ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΈΡ . ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠ°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ ΡΡΠ΅ΡΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΌΡ ΡΠ½ΠΎΠ²Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ has[id] Π±ΡΠ» ΠΎΡΠΈΡΠ΅Π½ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π³Π΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π·, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°ΠΊΠΈΠΌ:
- ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ): ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ vue, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ Π΄Π²Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ setTimeout
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ°):
nextTick(flushSchedulerQueue)ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ watcher.run (ΡΠΎ Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ) ΠΈ ΠΎΡΠΈΡΡΠΈΡΠ΅ has[id] - Π’ΡΠ΅ΡΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π²ΡΠΎΡΠΎΠ³ΠΎ setTimeout
- Π’ΡΠ΅ΡΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (microTask):
nextTick(flushSchedulerQueue)ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ watcher.run (ΡΠΎ Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ) ΠΈ ΠΎΡΠΈΡΡΠΈΡΠ΅ has[id]
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ Π΄Π²Π°ΠΆΠ΄Ρ.
Q3-2-3 ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² nextTick
export default {
data() {
return {
lib: 'vue'
}
},
watch: {
lib(val, old) {
console.log(`lib changed from ${old} to ${val}`)
}
},
created() {
this.$nextTick(() => {
this.lib = 'react'
})
this.$nextTick(() => {
this.lib = 'angular'
})
}
}
ΠΠΎΠΏΡΠΎΡ Π² ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·.
- ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ): ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ vue, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ Π΄Π²Π΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ microTask
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (Π·Π°Π΄Π°ΡΠ°): Π½Π΅Ρ macroTask
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (microTask): ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π΄Π°Ρ microTask Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ
[callback1, callback2], ΠΠΎΠ·ΡΠΌΠΈΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ callback1 ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ microTask, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π΅Π³ΠΎ, ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠΉΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ queueWatcher, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π·Π°Π΄Π°ΡΡ nextTick (microTask) ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Π΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π΄Π°Ρ microTask, ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°ΠΊΠΎΠΉ[callback2, callback3] - ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ (microTask): Π²Π·ΡΡΡ callback2 ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ micoTask, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π³ΠΎ, Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ queueWatcher, ΠΈ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ has[id] ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ callback3 Π½Π΅ Π±ΡΠ» Π²ΡΠΏΠΎΠ»Π½Π΅Π½, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠ΅Π΅Ρ[ id] Π΅ΡΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ. ΠΡΡΡΠΎ), ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ
- ΠΡΠΎΡΠΎΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (microTask): Π²Π·ΡΡΡ callback3 ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ microTask ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π³ΠΎ
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·.
Π‘ΡΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΠ΄Π΅Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Vue ΡΠ°ΠΊΠΎΠ²Π°: ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ + Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½ΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ°.ΠΠΎΠΊΠ° ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΡΡΠΈ Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΎΡΠ²ΠΎΠΈΡΡ Vue, ΠΏΠΈΡΠ°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΈ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. .
ΠΠ°Π»ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½-ΠΌΡΡΠ»Π΅Π½ΠΈΠ΅, Π½ΡΠΆΠ½Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΡΡΠ»Π΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈ vdom, Π° Π΅ΡΠ΅ Π΅ΡΡΡ ΡΠ΅ΠΌΡ ΠΏΠΎΡΡΠΈΡΡΡΡ πͺπ».