


Welches hat die höhere Priorität, v-if oder v-for in vue?
In vue2 hat v-for eine höhere Priorität als v-if; in vue3 hat v-if eine höhere Priorität als v-for. Verwenden Sie in Vue niemals gleichzeitig v-if und v-for für dasselbe Element, da dies zu einer Leistungsverschwendung führt (bei jedem Rendering wird zuerst eine Schleife ausgeführt und dann eine bedingte Beurteilung durchgeführt). Wenn Sie diese Situation vermeiden möchten, verwenden Sie Vorlagen kann in der äußeren Ebene verschachtelt werden (Seitenrendering generiert keine DOM-Knoten), die v-if-Beurteilung wird auf dieser Ebene durchgeführt und dann wird die v-for-Schleife intern ausgeführt.
Die Betriebsumgebung dieses Tutorials: Windows7-System, Vue3-Version, DELL G3-Computer.
v-if
-Direktive wird zum bedingten Rendern eines Inhalts verwendet. Direktiven werden zum bedingten Rendern eines Inhaltsblocks verwendet. Dieser Inhalt wird nur gerendert, wenn der Ausdruck der Direktive „true“ zurückgibt. Die v-for
-Direktive rendert eine Liste basierend auf einem Array. Die v-for
-Direktive erfordert eine spezielle Syntax der Form item in items
, wobei items
das Quelldatenarray oder -objekt ist und item ist der Alias des Array-Elements, das iteriert wird. <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
wird empfohlen, den key
-Wert festzulegen und sicherzustellen, dass jeder key
-Wert eindeutig ist. Dies ist diff
-Algorithmus ist optimiert. <template v-if="isShow"> <p v-for="item in items"> </template>
- In vue2 hat v-for eine höhere Priorität als v-if
- In vue3 hat v-if eine höhere Priorität als v-for🎜🎜
🎜🎜🎜v-for und v-if in vue2 🎜🎜🎜
v-if
undv-for
sind beide Anweisungen imvue
-Vorlagensystem. 🎜🎜Wenn dievue
-Vorlage kompiliert wird, wird das Befehlssystem in eine ausführbarerender
-Funktion umgewandelt. 🎜🎜Schreiben Sie einp
-Tag und verwenden Sie sowohlv-if
als auchv-for
. 🎜🎜Erstellen Sie eincomputed: { items: function() { return this.list.filter(function (item) { return item.isShow }) } }
Nach dem Login kopierenNach dem Login kopierenvue
Beispielsweise werdenisShow
- unditems
-Daten gespeichert. 🎜rrreeerrreee🎜_l
ist die Listenwiedergabefunktion vonvue
, und innerhalb der Funktion wird eineif
-Beurteilung durchgeführt.
Vorläufige Schlussfolgerung:v-for
hat eine höhere Priorität alsv-if
.
Platzieren Sie dannv-for
undv-if
in verschiedenen Tags 🎜rrreee🎜 und geben Sie dann dierender
-Funktion 🎜rrreee🎜this aus Wir können sehen, dass, wennv-for
undv-if
für verschiedene Tags verwendet werden, diese zuerst beurteilt werden und dann die Liste gerendert wird. 🎜rrreee🎜Bei derif
-Beurteilung wirdv-for
vorv-if
beurteilt. 🎜🎜Letztendlich hatv-for
eine höhere Priorität alsv-if
. 🎜🎜🎜v-for und v-if in vue3🎜🎜🎜In vue3 hat v-if eine höhere Priorität als v-fo. Wenn also v-if ausgeführt wird, existiert die aufgerufene Variable noch nicht, was dazu führt Ausnahme 🎜🎜🎜Erklärung: 🎜Es gibt normalerweise zwei Situationen, die uns dazu veranlassen: 🎜🎜1. Um Elemente in der Liste zu filtern, wie zum Beispiel: 🎜rrreee- 🎜Fügen Sie sie in vue2 zusammen und geben Sie sie aus Rendering Aus der Funktion geht hervor, dass zuerst die Schleife ausgeführt wird und dann die Bedingungen beurteilt werden. Selbst wenn wir nur einen kleinen Teil der Elemente in der Liste rendern, müssen wir jedes Mal die gesamte Liste durchlaufen. rendern, was verschwenderisch sein wird🎜🎜In vue3 hat v-if eine höhere Priorität als v-fo. Wenn also v-if ausgeführt wird, existiert die aufgerufene Variable noch nicht, was zu einer Ausnahme führt🎜🎜🎜An diesem Punkt Definieren Sie zu diesem Zeitpunkt ein berechnetes Attribut (z. B.
activeUsers
) und geben Sie einfach die gefilterte Liste zurück (z. B.users.filter(u=>u.isActive)
). 🎜🎜2. Um zu vermeiden, dass die Liste ausgeblendet wird🎜rrreee- 🎜Fügen Sie sie in ähnlicher Weise zusammen. Aus der Ausgabe-Rendering-Funktion ist ersichtlich, dass zuerst die Schleife und dann die Bedingung ausgeführt werden wird beurteilt, selbst wenn wir nur eine kleine Anzahl von Elementen in der Liste rendern, muss bei jedem erneuten Rendern die gesamte Liste durchlaufen werden, was ziemlich verschwenderisch ist🎜🎜In vue3 wird zwar kein Fehler gemeldet, wenn man auf diese Weise schreibt Der Beamte empfiehlt immer noch nicht, dies außerhalb zu tun. 🎜🎜🎜Verschieben Sie zu diesem Zeitpunkt
v-if
in das Containerelement (z. B.ul
,ol</code). >) oder umhüllen Sie es mit einer Schicht <code>template
Das ist es. 🎜🎜🎜🎜Hinweise🎜🎜🎜🎜Verwenden Sie v-if und v-for niemals gleichzeitig für dasselbe Element, da dies zu einer Leistungsverschwendung führt (jedes Rendering führt zuerst eine Schleife durch und führt dann eine bedingte Beurteilung durch)🎜🎜🎜🎜 Wenn Sie diese Situation vermeiden möchten, verschachteln Sie die Vorlage in der äußeren Ebene (Seitenrendering generiert keine Dom-Knoten), führen Sie eine V-IF-Beurteilung auf dieser Ebene durch und führen Sie dann intern eine V-For-Schleife aus Die Bedingung tritt ein. Innerhalb der Schleife können Elemente, die nicht angezeigt werden müssen, vorab durch das berechnete Attribut herausgefiltert werden🎜
computed: { items: function() { return this.list.filter(function (item) { return item.isShow }) } }
Das obige ist der detaillierte Inhalt vonWelches hat die höhere Priorität, v-if oder v-for in vue?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Vue.js eignet sich für kleine und mittelgroße Projekte und schnelle Iterationen, während React für große und komplexe Anwendungen geeignet ist. 1) Vue.js ist einfach zu bedienen und für Situationen geeignet, in denen das Team nicht ausreicht oder die Projektskala klein ist. 2) React hat ein reichhaltigeres Ökosystem und eignet sich für Projekte mit hoher Leistung und komplexen funktionalen Bedürfnissen.

Sie können der VUE -Taste eine Funktion hinzufügen, indem Sie die Taste in der HTML -Vorlage an eine Methode binden. Definieren Sie die Methode und schreiben Sie die Funktionslogik in der VUE -Instanz.

Die Verwendung von Bootstrap in Vue.js ist in fünf Schritte unterteilt: Startstrap installieren. Bootstrap in main.js. Verwenden Sie die Bootstrap -Komponente direkt in der Vorlage. Optional: benutzerdefinierter Stil. Optional: Verwenden Sie Plug-Ins.

Es gibt drei Möglichkeiten, sich auf JS -Dateien in Vue.js zu beziehen: Geben Sie den Pfad direkt mit dem & lt; Skript & gt an. Etikett;; Dynamischer Import mit dem montierten () Lebenszyklushaken; und importieren über die Vuex State Management Library.

Mit der Watch -Option in Vue.js können Entwickler auf Änderungen in bestimmten Daten anhören. Wenn sich die Daten ändert, löst sich eine Rückruffunktion aus, um Aktualisierungsansichten oder andere Aufgaben auszuführen. Zu den Konfigurationsoptionen gehören unmittelbar, die festlegen, ob ein Rückruf sofort ausgeführt werden soll, und Deep, das feststellt, ob Änderungen an Objekten oder Arrays rekursiv anhören sollen.

VUE.JS hat vier Methoden, um zur vorherigen Seite zurückzukehren: $ router.go (-1) $ router.back () verwendet & lt; Router-Link to = & quot;/& quot; Komponentenfenster.history.back () und die Methodenauswahl hängt von der Szene ab.

Implementieren Sie Marquee/Text-Scrolling-Effekte in VUE unter Verwendung von CSS-Animationen oder Bibliotheken von Drittanbietern. In diesem Artikel wird die Verwendung von CSS -Animation vorgestellt: Bildlauftext erstellen und Text mit & lt; div & gt;. Definieren Sie CSS -Animationen und setzen Sie Überlauf: Versteckt, Breite und Animation. Definieren Sie Keyframes, setzen Sie Transformation: Translatex () am Anfang und am Ende der Animation. Passen Sie die Animationseigenschaften wie Dauer, Bildlaufgeschwindigkeit und Richtung an.

Pagination ist eine Technologie, die große Datensätze in kleine Seiten aufteilt, um die Leistung und die Benutzererfahrung zu verbessern. In VUE können Sie die folgende integrierte Methode zum Paging verwenden: Berechnen Sie die Gesamtzahl der Seiten: TotalPages () TRAVERSAL-Seitennummer: V-für Anweisung, um die aktuelle Seite festzulegen: aktuelle Seite
