Comprendre la réactivité

Voir la vidéo
Description Sommaire

Dans ce chapitre nous allons explorer plus en profondeur le fonctionnement de la réactivité pour comprendre comment Vue.js gère la synchronisation entre le DOM et l'état. Nous allons pour cela explorer le code générer lorsque l'on construit le projet.

unref()

Lorsqu'on avait vu la partie template on a remarqué qu'il n'était pas nécessaire d'écrire le .value lorsque l'on fait référence à une ref. En analysant le code compilé on remarque que Vue.js utilise systèmatiquement unref() lors de l'accès au variable de premier niveau. Cette méthode permet d'accéder à la propriété value si l'objet reçu est une ref.

Ainsi <h1>{{ msg }}</h1> devient :

createElementVNode("h1", null, toDisplayString(unref(msg)), 1),

VirtualDOM

Le second point est l'utilisation du virtual dom. Un composant est une fonction qui va renvoyer un objet représentant la structure attendu. Cette structure est appelée du virtual DOM. Lorsque l'état change, la fonction est re-exécutée pour renvoyer une nouvelle structure virtual DOM. En comparant cette structure à la précédente Vue.js sera capable de déterminer les changements à faire au niveau du DOM réel.

Watchers

Maintenant si on regarde le code d'un composant compilé voici ce que l'on obtient :

const __sfc__ = {
  __name: 'App',
  setup(__props) {

  const msg = ref('hello')

  return (_ctx, _cache) => {
    return (_openBlock(), _createElementBlock(_Fragment, null, [
      _createElementVNode("h1", null, _toDisplayString(msg.value), 1 /* TEXT */),
      _withDirectives(_createElementVNode("input", {
        "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => ((msg).value = $event))
      }, null, 512 /* NEED_PATCH */), [
        [_vModelText, msg.value]
      ])
    ], 64 /* STABLE_FRAGMENT */))
  }
}

La fonction qui génère le Virtual DOM va agir comme un watchEffect() et Vue.js détectera automatiquement de quel variable dynamique la fonction dépend. Lorsque la valeur d'une de ces variable change, Vue.js saura qu'il doit générer une nouvelle version du Virtual DOM.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager