ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Vue простым способом, ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ² Π½Π° нСсколько вопросов

Vue.js

πŸŽ™ ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Vue ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ «нСбольшого ΠΈ простого Π² использовании».Благодаря Π΅Π³ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΈ ясному ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблонов ΠΈ ΠΌΠΎΡ‰Π½ΠΎΠΉ систСмС инструкций ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²ΡƒΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ страницу привязки Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк ΠΊΠΎΠ΄Π°. Однако ΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ Π·Π½Π°Π΅ΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Vue Π΄Π΅Π»Π°Π΅Ρ‚ для нас Π·Π° этим.

Vue ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ ящику, ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ страницу. Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ это ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Vue ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ это Π·Π° нас. Однако ΠΏΠ΅Ρ€Π΅Π΄ Π»ΠΈΡ†ΠΎΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… острых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ измСнились, ΠΊΡ‚ΠΎ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ», ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΈ Ρ‚. Π΄. Π’ настоящСС врСмя это слоТно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π­Ρ‚ΠΎ всС спрятано Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ ящика, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅.

Π˜Ρ‚Π°ΠΊ, я Ρ…ΠΎΡ‡Ρƒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Vue Π½Π° самом Π΄Π΅Π»Π΅ довольно слоТно.

Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΡΡŒ с этими ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΌΡ‹ часто Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ ΠΈ Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ, ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ нСэффСктивно. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π°ΠΌ Π½Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² дСталях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Vue.

πŸ”‘ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ вопросов

На самом Π΄Π΅Π»Π΅, согласно ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Vue, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ процСссы:

  1. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ экзСмпляр Vue, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
  2. ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
  3. Π–Π΄Π΅ΠΌ обновлСния

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вопросы, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ сталкиваСмся, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

  1. Каков процСсс ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Vue
  2. ΠŸΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ Π»ΠΈ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ обновлСнию прСдставлСний?
  3. Когда ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ прСдставлСния

πŸ’‘ Вопрос

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)ПослС этого выполняСм наш смонтированный ΠΌΠ΅Ρ‚ΠΎΠ΄.

Зная эту ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ сомнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:

  1. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании вычисляСмого свойства Π² часах, созданных, смонтированных, Π±Ρ‹Π»ΠΎ Π»ΠΈ вычислСнноС свойство ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ?
  2. МоТно Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свойство Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вычисляСмого свойства
  3. ИзмСнСниС свойств ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° часов Π² Ρ„Π°ΠΉΠ»Π΅ created Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ часов? Если Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅, сколько Ρ€Π°Π· ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ?
  4. ...ΠΆΠ΄ΠΈΡ‚Π΅ вопросов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹

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, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ:

  1. сам Ρ†ΠΈΠΊΠ» событий
  2. БистСма Ρ†ΠΈΠΊΠ»ΠΎΠ² событий 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, Π² сочСтании с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ исходного ΠΊΠΎΠ΄Π°, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΎΠ²Π°:

  1. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° lib ΠΈ lock ΠΈ соотвСтствСнно Π½Π°Π±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅
  2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ часы, ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° lib (Ρ‚.Π΅. ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Ρ, Ρ‚Π΅ΠΌ самым сформировав Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° lib ΠΈ оТидая «подходящСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ» для выполнСния нашСго Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.
  3. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° объявлСния.Π’ это врСмя инициализация Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ.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

Π•ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  1. ΠΏΠΎΡ‡Π΅ΠΌΡƒ часы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·
  2. ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΡƒΠ³Π»ΠΎΠ²Π°Ρ‚Ρ‹ΠΉ

Π₯отя это Π³Π»ΡƒΠΏΡ‹ΠΉ вопрос, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠΏΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Π»ΡƒΠ±ΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

Богласно 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 Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Π΄Π²ΡƒΡ… Ρ†ΠΈΠΊΠ»Π°Ρ… событий соотвСтствСнно, Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

  1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π° сцСнария, Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π°): инициализация vue, созданный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π΅ асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ
  2. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ setTimeout
  3. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ setTimeout

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ событий ΠΌΡ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ запустили ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ queueWatcher, поэтому Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡŒ Π±Ρ‹Π» ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΆΠ΄Π°Π» выполнСния nextTick, Π° nextTick Π±Ρ‹Π» ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅ΠΉ. , поэтому наш описанный Π²Ρ‹ΡˆΠ΅ процСсс стал Ρ‚Π°ΠΊΠΈΠΌ:

  1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий (Π·Π°Π΄Π°Ρ‡Π° сцСнария): инициализация vue, созданный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π΅ асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ.
  2. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ setTimeout
  3. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°):nextTick(flushSchedulerQueue)Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ watcher.run (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ) ΠΈ очиститС has[id]
  4. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ setTimeout

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ Ρ†ΠΈΠΊΠ»Π΅ событий js сначала Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ всС ΠΊΠΎΠ΄Ρ‹ синхронизации, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ взята ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ для выполнСния. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π½ΡŒΡ‚Π΅ всС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΈΡ…. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСго этого процСсса запустится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий.

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ†ΠΈΠΊΠ» событий, ΠΌΡ‹ снова ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ has[id] Π±Ρ‹Π» ΠΎΡ‡ΠΈΡ‰Π΅Π½ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ шагС, поэтому ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·, поэтому процСсс становится Ρ‚Π°ΠΊΠΈΠΌ:

  1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий (Π·Π°Π΄Π°Ρ‡Π° сцСнария): инициализация vue, созданный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π΅ асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ.
  2. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ setTimeout
  3. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°):nextTick(flushSchedulerQueue)Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ watcher.run (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ) ΠΈ очиститС has[id]
  4. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ setTimeout
  5. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Ρ†ΠΈΠΊΠ» событий (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'
    })
  }
}

Вопрос Π² Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ часы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

  1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π° сцСнария): инициализация vue, созданный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π΅ асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ microTask
  2. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (Π·Π°Π΄Π°Ρ‡Π°): Π½Π΅Ρ‚ macroTask
  3. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (microTask): Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ microTask выглядит Ρ‚Π°ΠΊ[callback1, callback2], Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ callback1 ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ microTask, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ queueWatcher, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ nextTick (microTask) ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ microTask, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ становится Ρ‚Π°ΠΊΠΎΠΉ[callback2, callback3]
  4. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» событий (microTask): Π²Π·ΡΡ‚ΡŒ callback2 ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ micoTask, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ queueWatcher, ΠΈ Π² это врСмя has[id] ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ callback3 Π½Π΅ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, поэтому ΠΈΠΌΠ΅Π΅Ρ‚[ id] Π΅Ρ‰Π΅ Π½Π΅ выполнялся. ΠŸΡƒΡΡ‚ΠΎ), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ просто пропуститС Π΅Π³ΠΎ
  5. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий (microTask): Π²Π·ΡΡ‚ΡŒ callback3 ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ microTask ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΎΠ½ пСчатаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

На самом Π΄Π΅Π»Π΅ идСя Π΄ΠΈΠ·Π°ΠΉΠ½Π° Vue Ρ‚Π°ΠΊΠΎΠ²Π°: Ρ†ΠΈΠΊΠ» событий + двусторонняя привязка.Пока ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ эти Π΄Π²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎ-настоящСму ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Vue, ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ прСдсказуСмый ΠΊΠΎΠ΄ ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ использовании. .

Мало ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΈΠ·Π°ΠΉΠ½-ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅, Π½ΡƒΠΆΠ½Ρ‹ инструмСнты для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ, Ρ‡Π΅ΠΌ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ компилятор ΠΈ vdom, Π° Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ Ρ‡Π΅ΠΌΡƒ ΠΏΠΎΡƒΡ‡ΠΈΡ‚ΡŒΡΡ πŸ’ͺ🏻.