Maison interface Web Questions et réponses frontales Lequel a la priorité la plus élevée, v-if ou v-for en vue ?

Lequel a la priorité la plus élevée, v-if ou v-for en vue ?

Jul 20, 2022 pm 06:02 PM
vue vue.js v-if v-for

Dans vue2, v-for a une priorité plus élevée que v-if ; dans vue3, v-if a une priorité plus élevée que v-for. Dans Vue, n'utilisez jamais v-if et v-for sur le même élément en même temps, ce qui entraînerait un gaspillage de performances (chaque rendu bouclera d'abord puis effectuera un jugement conditionnel si vous souhaitez éviter cette situation, Modèles) ; peut être imbriqué dans la couche externe (le rendu de la page ne génère pas de nœuds DOM), le jugement v-if est effectué sur cette couche, puis la boucle v-for est effectuée en interne.

Lequel a la priorité la plus élevée, v-if ou v-for en vue ?

L'environnement d'exploitation de ce tutoriel : système windows7, version vue3, ordinateur DELL G3.

La directive v-if est utilisée pour restituer conditionnellement un élément de contenu. Les directives sont utilisées pour restituer conditionnellement un bloc de contenu. Ce contenu ne sera rendu que si l'expression de la directive renvoie vrai. La directive
v-for affiche une liste basée sur un tableau. La directive v-for nécessite une syntaxe spéciale de la forme item in items, où items est le tableau ou l'objet de données source, et item est l'alias de l'élément du tableau en cours d'itération. <code>v-if指令用于条件性地渲染一块内容。指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true值的时候被渲染。
v-for指令基于一个数组来渲染一个列表。v-for指令需要使用item in items形式的特殊语法,其中items是源数据数组或者对象,而item则是被迭代的数组元素的别名。

v-for的时候,建议设置key值,并且保证每一个key值都是独一无二的,这便是diff算法进行优化。

<modal></modal>

Copier après la connexion
  •     {{ item.label }}
  • 优先级

    其实在vue2和vue3中的答案是截然相反的。

    • 在vue2中,v-for的优先级高于v-if

    • 在vue3中,v-if的优先级高于v-for

    Lequel a la priorité la plus élevée, v-if ou v-for en vue ?

    vue2中的v-for和v-if

    v-ifv-for都是vue模板系统中的指令。

    vue模板编译的时候,会将指令系统转化为可执行的render函数。

    编写一个p标签,同时使用v-ifv-for

    <div>
        <p>
            {{ item.title }}
        </p>
    </div>
    Copier après la connexion

    创建vue示例,存放isShowitems数据。

    const app = new Vue({
      el: "#app",
      data() {
        return {
          items: [
            { title: "foo" },
            { title: "baz" }]
        }
      },
      computed: {
        isShow() {
          return this.items && this.items.length > 0
        }
      }
    })
    Copier après la connexion
    ƒ anonymous() {
      with (this) { return 
        _c('div', { attrs: { "id": "app" } }, 
        _l((items), function (item) 
        { return (isShow) ? _c('p', [_v("\n" + _s(item.title) + "\n")]) : _e() }), 0) }
    }
    Copier après la connexion

    _lvue的列表渲染函数,函数内部都会进行一次if判断。
    初步得到结论:v-for优先级是比v-if高。
    再将v-forv-if置于不同标签

    <div>
        <template>
            <p>{{item.title}}</p>
        </template>
    </div>
    Copier après la connexion

    再输出下render函数

    ƒ anonymous() {
      with(this){return 
        _c('div',{attrs:{"id":"app"}},
        [(isShow)?[_v("\n"),
        _l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)}
    }
    Copier après la connexion

    这时候我们可以看到,v-forv-if作用在不同标签时候,是先进行判断,再进行列表的渲染。

    export function genElement (el: ASTElement, state: CodegenState): string {
      if (el.parent) {
        el.pre = el.pre || el.parent.pre
      }
      if (el.staticRoot && !el.staticProcessed) {
        return genStatic(el, state)
      } else if (el.once && !el.onceProcessed) {
        return genOnce(el, state)
      } else if (el.for && !el.forProcessed) {
        return genFor(el, state)
      } else if (el.if && !el.ifProcessed) {
        return genIf(el, state)
      } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
        return genChildren(el, state) || 'void 0'
      } else if (el.tag === 'slot') {
        return genSlot(el, state)
      } else {
        // component or element
        ...
    }
    Copier après la connexion

    在进行if判断的时候,v-for是比v-if先进行判断。

    最终v-for优先级比v-if高。

    vue3中的v-for和v-if

    在vue3中,v-if的优先级高于v-fo,所以v-if执行时,它调用的变量还不存在,就会导致异常

    说明:通常有两种情况下导致我们这样做:

    1.为了过滤列表中的项目,比如:

    v-for="user in users" v-if="user.isActive"
    Copier après la connexion
    • 在vue2中,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费
    • 在vue3中,v-if的优先级高于v-fo,所以v-if执行时,它调用的变量还不存在,就会导致异常

    此时定义一个计算属性(比如 activeUsers),让其返回过滤后的列表即可(比如users.filter(u=>u.isActive))。

    2.为了避免渲染本应该被隐藏的列表

    v-for="user in users" v-if="shouldShowUsers"
    Copier après la connexion
    • 同样,在vue2中,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费
    • 在vue3中,这样写虽然并不会报错,但是官方还是及其不推荐外面这样去做

    此时把v-if移动至容器元素上(比如ulol)或者外面包一层template

    Lorsque v-for, il est recommandé de définir la valeur key et de s'assurer que chaque valeur key est unique. Il s'agit de . L'algorithme diff est optimisé.

    <template v-if="isShow">
        <p v-for="item in items">
    </template>
    Copier après la connexion
    Priorité

    En fait, les réponses dans vue2 et vue3 sont complètement opposées.
    • Dans vue2, v-for a une priorité plus élevée que v-if
    • Dans vue3, v-if a une priorité plus élevée que v-for

      🎜🎜Lequel a la priorité la plus élevée, v-if ou v-for en vue ?🎜🎜🎜v-for et v-if dans vue2 🎜🎜🎜 v-if et v-for sont tous deux des instructions dans le système de modèles vue. 🎜🎜Lorsque le modèle vue est compilé, le système de commande sera converti en une fonction render exécutable. 🎜🎜Écrivez une balise p et utilisez à la fois v-if et v-for🎜
      computed: {
          items: function() {
            return this.list.filter(function (item) {
              return item.isShow
            })
          }
      }
      Copier après la connexion
      Copier après la connexion
      🎜Créez une vue exemple, stocke les données isShow et items. 🎜rrreeerrreee🎜_l est la fonction de rendu de liste de vue, et un jugement if sera effectué à l'intérieur de la fonction.
      Conclusion préliminaire : v-for a une priorité plus élevée que v-if.
      Placez ensuite v-for et v-if dans différentes balises 🎜rrreee🎜 puis affichez la fonction render 🎜rrreee🎜this Nous pouvons voir que lorsque v-for et v-if sont utilisés sur des balises différentes, ils sont d'abord jugés puis la liste est rendue. 🎜rrreee🎜Lors du jugement if, v-for est jugé avant v-if. 🎜🎜En fin de compte, v-for a une priorité plus élevée que v-if. 🎜🎜🎜v-for et v-if dans vue3🎜🎜🎜Dans vue3, v-if a une priorité plus élevée que v-fo, donc lorsque v-if est exécuté, la variable qu'il appelle n'existe pas encore, ce qui entraînera Exception 🎜🎜🎜Explication : 🎜Il y a généralement deux situations qui nous amènent à faire cela : 🎜🎜1 Afin de filtrer les éléments de la liste, tels que : 🎜rrreee
        🎜Dans vue2, rassemblez-les et affichez le. rendu On peut voir à partir de la fonction que la boucle sera exécutée en premier et ensuite les conditions seront jugées. Même si nous ne restituons qu'une petite partie des éléments de la liste, nous devons parcourir la liste entière à chaque fois que nous restituons. render, ce qui sera du gaspillage🎜🎜Dans vue3, v-if La priorité est supérieure à v-fo, donc lorsque v-if est exécuté, la variable qu'il appelle n'existe pas encore, ce qui provoquera une exception🎜🎜🎜À ce moment-là fois, définissez un attribut calculé (tel que activeUsers), let Il renvoie simplement la liste filtrée (telle que users.filter(u=>u.isActive)). 🎜🎜2. Afin d'éviter de rendre la liste qui devrait être masquée🎜rrreee
          🎜De même, dans vue2, rassemblez-les. La fonction de rendu de sortie montre que la boucle sera exécutée en premier, puis la condition. sera jugé, même si nous ne restituons qu'un petit nombre d'éléments dans la liste, il faut parcourir toute la liste à chaque fois qu'elle est restituée, ce qui est assez inutile🎜🎜Dans vue3, bien qu'écrire de cette façon ne signalera pas d'erreur, le officiel ne recommande toujours pas de faire cela à l'extérieur. 🎜🎜🎜Pour le moment, déplacez v-if vers l'élément conteneur (tel que ul, ol</code). >) ou enveloppez-le avec une couche de <code>modèle C'est tout. 🎜🎜🎜🎜Notes🎜🎜🎜🎜N'utilisez jamais v-if et v-for sur le même élément en même temps, ce qui entraînerait un gaspillage de performances (chaque rendu bouclera d'abord puis effectuera un jugement conditionnel)🎜🎜🎜🎜 Si vous souhaitez éviter cette situation, imbriquez le modèle dans la couche externe (le rendu de la page ne génère pas de nœuds dom), effectuez un jugement v-if sur cette couche, puis effectuez une boucle v-for en interne🎜🎜🎜rrreee🎜🎜🎜if la condition se produit À l'intérieur de la boucle, les éléments qui n'ont pas besoin d'être affichés peuvent être filtrés à l'avance via l'attribut calculé🎜
        computed: {
            items: function() {
              return this.list.filter(function (item) {
                return item.isShow
              })
            }
        }
        Copier après la connexion
        Copier après la connexion

        【相关视频教程推荐:vuejs入门教程web前端入门

        Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    Où trouver la courte de la grue à atomide atomique
    1 Il y a quelques semaines By DDD

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Comment référencer le fichier JS avec Vue.js Comment référencer le fichier JS avec Vue.js Apr 07, 2025 pm 11:27 PM

    Il existe trois façons de se référer aux fichiers JS dans Vue.js: spécifiez directement le chemin à l'aide du & lt; script & gt; étiqueter;; importation dynamique à l'aide du crochet de cycle de vie monté (); et l'importation via la bibliothèque de gestion de l'État Vuex.

    Que signifie la charge paresseuse? Que signifie la charge paresseuse? Apr 07, 2025 pm 11:54 PM

    Dans vue.js, le chargement paresseux permet de charger dynamiquement les composants ou les ressources, en réduisant le temps de chargement des pages initiales et en améliorant les performances. La méthode de mise en œuvre spécifique comprend l'utilisation de & lt; keep-alive & gt; et & lt; composant est & gt; composants. Il convient de noter que le chargement paresseux peut provoquer des problèmes de FOUC (écran d'éclat) et ne doit être utilisé que pour les composants qui nécessitent un chargement paresseux pour éviter les frais généraux de performances inutiles.

    Vue réalise l'effet de défilement de chapiteau / texte Vue réalise l'effet de défilement de chapiteau / texte Apr 07, 2025 pm 10:51 PM

    Implémentez les effets de défilement marquee / texte dans VUE, en utilisant des animations CSS ou des bibliothèques tierces. Cet article présente comment utiliser l'animation CSS: créer du texte de défilement et envelopper du texte avec & lt; div & gt;. Définissez les animations CSS et défini: caché, largeur et animation. Définissez les images clés, Set Transforment: Translatex () au début et à la fin de l'animation. Ajustez les propriétés d'animation telles que la durée, la vitesse de défilement et la direction.

    Comment utiliser Bootstrap en Vue Comment utiliser Bootstrap en Vue Apr 07, 2025 pm 11:33 PM

    L'utilisation de bootstrap dans vue.js est divisée en cinq étapes: installer bootstrap. Importer un bootstrap dans main.js. Utilisez le composant bootstrap directement dans le modèle. Facultatif: style personnalisé. Facultatif: utilisez des plug-ins.

    Comment utiliser Watch in Vue Comment utiliser Watch in Vue Apr 07, 2025 pm 11:36 PM

    L'option Watch dans Vue.js permet aux développeurs d'écouter des modifications de données spécifiques. Lorsque les données changent, regardez déclenche une fonction de rappel pour effectuer des vues de mise à jour ou d'autres tâches. Ses options de configuration incluent immédiatement, qui spécifie s'il faut exécuter un rappel immédiatement, et profond, ce qui spécifie s'il faut écouter récursivement les modifications des objets ou des tableaux.

    Comment revenir à la page précédente par Vue Comment revenir à la page précédente par Vue Apr 07, 2025 pm 11:30 PM

    Vue.js dispose de quatre méthodes pour revenir à la page précédente: $ router.go (-1) $ router.back () utilise & lt; router-link to = & quot; / & quot; Composant Window.History.back (), et la sélection de la méthode dépend de la scène.

    Comment interroger la version de Vue Comment interroger la version de Vue Apr 07, 2025 pm 11:24 PM

    Vous pouvez interroger la version Vue en utilisant Vue Devtools pour afficher l'onglet Vue dans la console du navigateur. Utilisez NPM pour exécuter la commande "NPM List -g Vue". Recherchez l'élément VUE dans l'objet "dépendances" du fichier package.json. Pour les projets Vue CLI, exécutez la commande "Vue --version". Vérifiez les informations de la version dans le & lt; script & gt; Tag dans le fichier html qui fait référence au fichier VUE.

    Que signifie la valeur de passage du composant Vue? Que signifie la valeur de passage du composant Vue? Apr 07, 2025 pm 11:51 PM

    Les valeurs de passage des composants Vue sont un mécanisme pour passer des données et des informations entre les composants. Il peut être mis en œuvre via des propriétés (accessoires) ou des événements: accessoires: déclarer les données à recevoir dans le composant et passer les données dans le composant parent. Événements: Utilisez la méthode $ EMIT pour déclencher un événement et écoutez-le dans le composant parent à l'aide de la directive V-on.

    See all articles