All quizzesHard
Vue Expert
Preview — 3 of 10 questions
Vue 3 compile les templates en render functions optimisées. Que fait ce flag PatchFlags ?
javascript
// Compiled output of:
// <div :class="cls">{{ msg }}</div>
import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"
export function render(_ctx) {
return (_openBlock(), _createElementBlock("div", {
class: _normalizeClass(_ctx.cls)
}, _toDisplayString(_ctx.msg), 3 /* TEXT, CLASS */))
}A3 est l'index du nœud dans le Virtual DOM — une optimisation de recherche
B3 indique que l'élément a 3 enfants
C3 est un PatchFlag bitmask — 1 = TEXT, 2 = CLASS, donc 3 = TEXT | CLASS. Vue sait à la compilation quelles parties sont dynamiques, et ne vérifie que celles-ci lors du diffing — pas l'intégralité du nœud
DPatchFlags sont uniquement utiles pour le SSR — en client-side Vue utilise un diff complet
À quoi sert effectScope et dans quel cas l'utiliser ?
javascript
import { effectScope, ref, watchEffect, computed } from 'vue'
function createFeature() {
const scope = effectScope()
scope.run(() => {
const count = ref(0)
const double = computed(() => count.value * 2)
watchEffect(() => console.log(count.value))
// All effects registered here belong to this scope
})
return {
stop: () => scope.stop() // stops all effects at once
}
}AeffectScope crée un Worker thread séparé pour les effets réactifs
BeffectScope regroupe des effets réactifs (computed, watch, watchEffect) pour les arrêter tous ensemble — utile pour les stores, les plugins, ou les composables qui s'activent/désactivent dynamiquement
CeffectScope est équivalent à onScopeDispose — ce sont des alias
DLes effets créés dans un effectScope ne sont jamais garbage collectés
Comment écrire un composable qui accepte à la fois des valeurs statiques et des refs ?
javascript
import { toValue, watchEffect, ref } from 'vue'
function useFetch(url) {
const data = ref(null)
watchEffect(() => {
// Works whether url is a string, ref, or getter function
const resolvedUrl = toValue(url)
fetch(resolvedUrl).then(r => r.json()).then(d => data.value = d)
})
return { data }
}
// All these usages work:
useFetch('/api/static') // plain string
useFetch(ref('/api/dynamic')) // ref
useFetch(() => `/api/${userId}`) // getter (reactive)AtoValue() résout une source en sa valeur actuelle — si c'est une ref, retourne .value ; si c'est une fonction, l'appelle ; sinon retourne la valeur telle quelle. Cela permet aux composables d'être "MaybeRef-aware"
BtoValue() convertit n'importe quelle valeur en string
CtoValue() est identique à unref() — même comportement
DtoValue() n'existe pas en Vue 3 — c'est resolveValue() le nom correct
Sign up free to play
Answer all 10 questions (7 more), see explanations for every answer, and track your score.