


Lequel a la priorité la plus élevée, v-if ou v-for en vue ?
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.
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>
优先级
其实在vue2和vue3中的答案是截然相反的。
在vue2中,v-for的优先级高于v-if
在vue3中,v-if的优先级高于v-for
vue2中的v-for和v-if
v-if
和v-for
都是vue
模板系统中的指令。
在vue
模板编译的时候,会将指令系统转化为可执行的render
函数。
编写一个p
标签,同时使用v-if
和v-for
<div> <p> {{ item.title }} </p> </div>
创建vue
示例,存放isShow
和items
数据。
const app = new Vue({ el: "#app", data() { return { items: [ { title: "foo" }, { title: "baz" }] } }, computed: { isShow() { return this.items && this.items.length > 0 } } })
ƒ 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) } }
_l
是vue
的列表渲染函数,函数内部都会进行一次if
判断。
初步得到结论:v-for
优先级是比v-if
高。
再将v-for
与v-if
置于不同标签
<div> <template> <p>{{item.title}}</p> </template> </div>
再输出下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)} }
这时候我们可以看到,v-for
与v-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 ... }
在进行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"
- 在vue2中,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费
- 在vue3中,v-if的优先级高于v-fo,所以v-if执行时,它调用的变量还不存在,就会导致异常
此时定义一个计算属性(比如 activeUsers
),让其返回过滤后的列表即可(比如users.filter(u=>u.isActive)
)。
2.为了避免渲染本应该被隐藏的列表
v-for="user in users" v-if="shouldShowUsers"
- 同样,在vue2中,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费
- 在vue3中,这样写虽然并不会报错,但是官方还是及其不推荐外面这样去做
此时把v-if
移动至容器元素上(比如ul
、ol
)或者外面包一层template
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>
- 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🎜🎜
🎜🎜🎜v-for et v-if dans vue2 🎜🎜🎜
v-if
etv-for
sont tous deux des instructions dans le système de modèlesvue
. 🎜🎜Lorsque le modèlevue
est compilé, le système de commande sera converti en une fonctionrender
exécutable. 🎜🎜Écrivez une balisep
et utilisez à la foisv-if
etv-for
🎜🎜Créez unecomputed: { items: function() { return this.list.filter(function (item) { return item.isShow }) } }
Copier après la connexionCopier après la connexionvue
exemple, stocke les donnéesisShow
etitems
. 🎜rrreeerrreee🎜_l
est la fonction de rendu de liste devue
, et un jugementif
sera effectué à l'intérieur de la fonction.
Conclusion préliminaire :v-for
a une priorité plus élevée quev-if
.
Placez ensuitev-for
etv-if
dans différentes balises 🎜rrreee🎜 puis affichez la fonctionrender
🎜rrreee🎜this Nous pouvons voir que lorsquev-for
etv-if
sont utilisés sur des balises différentes, ils sont d'abord jugés puis la liste est rendue. 🎜rrreee🎜Lors du jugementif
,v-for
est jugé avantv-if
. 🎜🎜En fin de compte,v-for
a une priorité plus élevée quev-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 queusers.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 queul
,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 }) } }
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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.

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.

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.

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.

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.

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.

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.
