


Bringt Sie zu einem tieferen Verständnis von Vue.$nextTick (eine kurze Analyse des Prinzips)
Dieser Artikel wird das reine Wissen von Vue mit Ihnen teilen, Vue.nextTick vorstellen, das Sie nicht kennen, und über das Prinzip von Vue.$nextTick sprechen. Ich hoffe, es wird für alle hilfreich sein!
... Ich habe diese Daten geändert, aber wenn ich sie erhalte, warum ist es der letzte Wert (ich bin faul, daher werde ich kein konkretes Beispiel nennen?) „Ich verstehe nicht, mein DOM wird asynchron aktualisiert!“
vuejs-Video-Tutorial
,Web-Front-End-Entwicklung]
Dies wird in der offiziellen Vue-Dokumentation erklärt:Vielleicht ist Ihnen nicht aufgefallen, dass Vue DOM-Updates asynchron durchführt. Solange Datenänderungen beobachtet werden, öffnet Vue eine Warteschlange und puffert alle Datenänderungen, die in derselben Ereignisschleife auftreten. Wenn derselbe Watcher mehrmals ausgelöst wird, wird er nur einmal in die Warteschlange verschoben. Diese Deduplizierung der Daten während der Pufferung ist sehr wichtig, um unnötige Berechnungen und DOM-Operationen zu vermeiden. Beim nächsten „Tick“ der Ereignisschleife leert Vue dann die Warteschlange und führt die eigentliche (deduplizierte) Arbeit aus.
Um es ganz klar auszudrücken: Dies hängt tatsächlich eng mit der Ereignisschleife in JS zusammen, das heißt, Vue kann nicht jede Datenänderung rendern. Diese Änderungen werden zunächst in eine asynchrone Warteschlange gestellt und gleichzeitig dedupliziert Wenn Sie diese Daten beispielsweise dreimal ändern, wird nur die letzte gespeichert. Diese Änderungen können in Form einer Warteschlange gespeichert werden. Nun stellt sich die Frage: Zu welchem Zeitpunkt in der Ereignisschleife ändert Vue das DOM? Vue hat zwei Optionen: Eine besteht darin, das DOM am Ende dieser Ereignisschleife zu aktualisieren, und die andere darin, die DOM-Aktualisierung in die nächste Runde der Ereignisschleife zu platzieren. zZu diesem Zeitpunkt klopfte You Yuxi auf ihre Brust und sagte: „Ich habe beide Methoden!“ Da die endgültige Ausführung dieser Runde der Ereignisschleife jedoch viel schneller sein wird als die nächste Runde der Ereignisschleife, gibt Vue der ersten den Vorrang. , der zweite Mechanismus wird nur ausgelöst, wenn die Umgebung ihn nicht unterstützt. (Der Link, der mit ?? beginnt, lässt Sie die Ereignisschleife verstehen)
Obwohl die Leistung stark verbessert wurde, treten zu diesem Zeitpunkt Probleme auf. Wir alle wissen, dass in einer Runde der Ereignisschleife nach der Ausführung des Codes in Wenn der synchrone Ausführungsstapel abgeschlossen ist und der Inhalt der asynchronen Warteschlange ausgeführt wird, ist unser Vorgang zum Abrufen des DOM synchron! ! Würde das nicht bedeuten, dass die Daten, obwohl ich sie geändert habe, asynchron aktualisiert werden, und wenn ich sie erhalte, keine Zeit zum Ändern hatte, sodass das Problem am Anfang des Artikels auftritt? Das. . . Ich muss das wirklich tun, also was soll ich tun? ?Vue.$nextTick()Das spielt keine Rolle, Youda hat uns sehr sorgfältig mit
Vue.$nextTick()
versorgt Tatsächlich kann ein Satz $nextTick
klar erklären: Die Operation, die Sie in $nextTick
eingeben, wird nicht sofort ausgeführt, sondern wartet auf die Datenaktualisierung und die DOM-Aktualisierung Führen Sie es später aus, damit wir definitiv das Neueste erhalten.
Genauer gesagt verzögert die Methode $nextTick
den Rückruf bis zum nächsten DOM-Aktualisierungszyklus. (Wenn Sie diesen Satz nicht verstehen, können Sie [Hundekopf] oben lesen)
Wir alle verstehen die Bedeutung, also wie erfüllt $nextTick
diese magische Funktion? Der Kern ist wie folgt:
Vue.$nextTick()
Vue.$nextTick()
其实一句话就可以把$nextTick
这个东西讲明白:就是你放在$nextTick
当中的操作不会立即执行,而是等数据更新、DOM更新完成之后再执行,这样我们拿到的肯定就是最新的了。
再准确一点来讲就是$nextTick
方法将回调延迟到下次DOM更新循环之后执行。(看不懂这句人话的,可以看上面[狗头])
意思我们都懂了,那$nextTick
是怎样完成这个神奇的功能的呢? 核心如下:
Vue
在内部对异步队列尝试使用原生的Promise.then
、MutationObserver
和setImmediate
,如果执行环境不支持,则会采用setTimeout(fn, 0)
代替。
仔细地看这句话,你就可以发现这不就是利用 JavaScript 的这些异步回调任务队列,来实现 Vue 框架中自己的异步回调队列。这其实就是一个典型的将底层 JavaScript 执行原理应用到具体案例中的示例。
我在这里稍微总结一下:就是$nextTick
Vue
versucht intern, natives Promise.then
, MutationObserver
und setImmediate
zu verwenden Für asynchrone Warteschlangen > wird stattdessen setTimeout(fn, 0)
verwendet, wenn die Ausführungsumgebung dies nicht unterstützt.
$nextTick
fügt die Callback-Funktion in eine Mikroaufgabe oder eine Makroaufgabe ein, um ihre Ausführungsreihenfolge zu verzögern (ist die Zusammenfassung zu faul?) 🎜🎜Die Wichtig ist, die Bedeutung der drei Parameter im Quellcode zu verstehen: 🎜- callback: Die Operation, die wir ausführen möchten, kann in dieser Funktion platziert werden. Wir werden die Callback-Funktion in eine asynchrone Warteschlange stellen, bevor
$nextTick
einmal ausgeführt wird um festzustellen, ob es das erste Mal ist, einer Ereignisschleife beizutreten. Die Warteschlangenmontage für die asynchrone Ausführung wird nur beim ersten Hinzufügen ausgelöst - pending:标识,用以判断在某个事件循环中是否为第一次加入,第一次加入的时候才触发异步执行的队列挂载
- timerFunc:用来触发执行回调函数,也就是
Promise.then
或MutationObserver
或setImmediate
或setTimeout
的过程
$nextTick
就会把回调函数放到一个异步队列当中;理解之后,在看整个$nextTick
里面的执行过程,其实就是把一个个$nextTick
中的回调函数压入到callback队列当中,然后根据事件的性质等待执行,轮到它执行的时候,就执行一下,然后去掉callback队列中相应的事件。
使用
说了这么多,怎么用它呢? 很简单很简单
mounted: function () { this.$nextTick(function () { // Code that will run only after the // entire view has been rendered }) }
使用场景
created中获取DOM的操作需要使用它
就是我们上面的例子,你如果想要获取最新值,就用它
还有一些第三方插件使用过程中,使用到的情况,具体问题具体分析
参考 前端进阶面试题详细解答
补充
之前我一直搞不懂一个的问题,$nextTick
既然把它传入的方法变成微任务了,那它和其它微任务的执行顺序是怎样的呢?
这简单来说就是谁先挂载Promise
对象的问题,在调用$nextTick
方法时就会将其闭包内部维护的执行队列挂载到Promise
对象,在数据更新时Vue
内部首先就会执行$nextTick
方法,之后便将执行队列挂载到了Promise
对象上,其实在明白Js
的Event Loop
模型后,将数据更新也看做一个$nextTick
方法的调用,并且明白$nextTick
方法会一次性执行所有推入的回调,就可以明白执行顺序的问题了
还有$nextTick
和nextTick
区别就是nextTick
多了一个context参数,用来指定上下文。但两个的本质是一样的,$nextTick
是实例方法,nextTick
是类的静态方法而已;实例方法的一个好处就是,自动给你绑定为调用实例的this
timerFunc: wird zum Auslösen der Ausführungsrückruffunktion verwendet, d. h. Der Prozess von Promise.then
oder MutationObserver
oder setImmediate
oder setTimeout
$nextTick
besteht tatsächlich darin, die Rückruffunktionen in $nextTick
in die Rückrufwarteschlange zu verschieben und dann entsprechend der Art des Ereignisses auf die Ausführung zu warten . Wenn es ausgeführt wird, wird es ausgeführt und dann wird das entsprechende Ereignis in der Rückrufwarteschlange entfernt.
Verwendung
Nach so viel gesagt, wie benutzt man es? Sehr einfachrrreeeNutzungsszenarien
-
erstellt Das müssen Sie Verwenden Sie es, um das DOM zu erhalten🎜🎜Es ist unser Beispiel oben. Wenn Sie den neuesten Wert erhalten möchten, verwenden Sie es🎜🎜🎜Es werden auch einige Plug-Ins von Drittanbietern verwendet während der Nutzungssituation, spezifische Analyse spezifischer Probleme🎜
Ergänzung
🎜Ich konnte noch nie eine Frage beantworten, da$nextTick
seine eingehende Methode in eine Mikrotask umgewandelt hat. In welcher Reihenfolge werden diese und andere Mikrotasks ausgeführt? 🎜🎜Dies hängt einfach davon ab, wer das Promise
-Objekt zuerst einbindet. Wenn die Methode $nextTick
aufgerufen wird, wird die in ihrem Abschluss verwaltete Ausführungswarteschlange in Promise
-Objekt: Wenn die Daten aktualisiert werden, führt Vue
zunächst die Methode $nextTick
intern aus und stellt dann die Ausführungswarteschlange in Promise -Objekt, tatsächlich wird die Datenaktualisierung nach dem Verständnis des <code>Event Loop
-Modells von Js
auch als Aufruf von $nextTick
betrachtet > Methode und verstehen, dass die $nextTick
-Methode alle Push-Rückrufe auf einmal ausführt, können Sie das Problem der Ausführungsreihenfolge verstehen🎜🎜Es gibt auch $nextTick
und nextTick
Der Unterschied besteht darin, dass nextTick
einen zusätzlichen Kontextparameter hat, um den Kontext anzugeben. Aber das Wesentliche bei beiden ist das Gleiche. $nextTick
ist eine Instanzmethode und nextTick
ist nur eine statische Methode der Klasse es ist automatisch an Sie gebunden. Rufen Sie einfach this
der Instanz auf. 🎜🎜 (Teilen von Lernvideos: 🎜Vuejs-Einführungs-Tutorial🎜, 🎜Grundlegendes Programmiervideo🎜)🎜Das obige ist der detaillierte Inhalt vonBringt Sie zu einem tieferen Verständnis von Vue.$nextTick (eine kurze Analyse des Prinzips). 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



PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools In der heutigen Zeit der rasanten Entwicklung des Internets ist die Front-End-Entwicklung immer wichtiger geworden. Da Benutzer immer höhere Anforderungen an das Erlebnis von Websites und Anwendungen stellen, müssen Frontend-Entwickler effizientere und flexiblere Tools verwenden, um reaktionsfähige und interaktive Schnittstellen zu erstellen. Als zwei wichtige Technologien im Bereich der Front-End-Entwicklung können PHP und Vue.js in Kombination als perfekte Waffe bezeichnet werden. In diesem Artikel geht es um die Kombination von PHP und Vue sowie um detaillierte Codebeispiele, die den Lesern helfen sollen, diese beiden besser zu verstehen und anzuwenden

Mit der Entwicklung der Internet-Technologie hat die Front-End-Entwicklung immer mehr an Bedeutung gewonnen. Insbesondere die Popularität mobiler Geräte erfordert eine Front-End-Entwicklungstechnologie, die effizient, stabil, sicher und einfach zu warten ist. Als sich schnell entwickelnde Programmiersprache wird die Go-Sprache von immer mehr Entwicklern verwendet. Ist es also möglich, die Go-Sprache für die Front-End-Entwicklung zu verwenden? Als Nächstes wird in diesem Artikel ausführlich erläutert, wie die Go-Sprache für die Front-End-Entwicklung verwendet wird. Werfen wir zunächst einen Blick darauf, warum die Go-Sprache für die Front-End-Entwicklung verwendet wird. Viele Leute denken, dass die Go-Sprache eine ist

In Front-End-Entwicklungsinterviews decken häufige Fragen ein breites Themenspektrum ab, darunter HTML/CSS-Grundlagen, JavaScript-Grundlagen, Frameworks und Bibliotheken, Projekterfahrung, Algorithmen und Datenstrukturen, Leistungsoptimierung, domänenübergreifende Anfragen, Front-End-Engineering, Designmuster sowie neue Technologien und Trends. Interviewerfragen sollen die technischen Fähigkeiten, die Projekterfahrung und das Verständnis des Kandidaten für Branchentrends beurteilen. Daher sollten Kandidaten in diesen Bereichen umfassend vorbereitet sein, um ihre Fähigkeiten und Fachkenntnisse unter Beweis zu stellen.

Django ist ein in Python geschriebenes Webanwendungs-Framework, das Wert auf schnelle Entwicklung und saubere Methoden legt. Obwohl Django ein Web-Framework ist, müssen Sie zur Beantwortung der Frage, ob Django ein Front-End oder ein Back-End ist, ein tiefes Verständnis der Konzepte von Front-End und Back-End haben. Das Front-End bezieht sich auf die Schnittstelle, mit der Benutzer direkt interagieren, und das Back-End bezieht sich auf serverseitige Programme. Sie interagieren mit Daten über das HTTP-Protokoll. Wenn das Front-End und das Back-End getrennt sind, können die Front-End- und Back-End-Programme unabhängig voneinander entwickelt werden, um Geschäftslogik bzw. interaktive Effekte sowie den Datenaustausch zu implementieren.

Golang kann als Front-End verwendet werden. Golang ist eine sehr vielseitige Programmiersprache, mit der verschiedene Arten von Anwendungen entwickelt werden können, einschließlich Front-End-Anwendungen Eine Reihe von Problemen, die durch Sprachen wie JavaScript verursacht werden. Zum Beispiel Probleme wie schlechte Typsicherheit, geringe Leistung und schwierig zu wartender Code.

Als C#-Entwickler umfasst unsere Entwicklungsarbeit in der Regel die Front-End- und Back-End-Entwicklung. Mit der Weiterentwicklung der Technologie und der zunehmenden Komplexität von Projekten wird die gemeinsame Entwicklung von Front-End und Back-End immer wichtiger und komplexer. In diesem Artikel werden einige kollaborative Front-End- und Back-End-Entwicklungstechniken vorgestellt, um C#-Entwicklern dabei zu helfen, die Entwicklungsarbeit effizienter abzuschließen. Nach der Festlegung der Schnittstellenspezifikationen ist die gemeinsame Entwicklung von Front-End und Backend untrennbar mit dem Zusammenspiel der API-Schnittstellen verbunden. Um den reibungslosen Ablauf der kollaborativen Front-End- und Back-End-Entwicklung sicherzustellen, ist es am wichtigsten, gute Schnittstellenspezifikationen zu definieren. Bei der Schnittstellenspezifikation handelt es sich um den Namen der Schnittstelle

Als schnelle und effiziente Programmiersprache erfreut sich Go im Bereich der Backend-Entwicklung großer Beliebtheit. Allerdings assoziieren nur wenige Menschen die Go-Sprache mit der Front-End-Entwicklung. Tatsächlich kann die Verwendung der Go-Sprache für die Front-End-Entwicklung nicht nur die Effizienz verbessern, sondern Entwicklern auch neue Horizonte eröffnen. In diesem Artikel wird die Möglichkeit der Verwendung der Go-Sprache für die Front-End-Entwicklung untersucht und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis dieses Bereichs zu erleichtern. In der traditionellen Frontend-Entwicklung werden häufig JavaScript, HTML und CSS zum Erstellen von Benutzeroberflächen verwendet

Kombination von Golang und Front-End-Technologie: Um zu untersuchen, welche Rolle Golang im Front-End-Bereich spielt, sind spezifische Codebeispiele erforderlich. Mit der rasanten Entwicklung des Internets und mobiler Anwendungen ist die Front-End-Technologie immer wichtiger geworden. Auch in diesem Bereich kann Golang als leistungsstarke Back-End-Programmiersprache eine wichtige Rolle spielen. In diesem Artikel wird untersucht, wie Golang mit Front-End-Technologie kombiniert wird, und sein Potenzial im Front-End-Bereich anhand spezifischer Codebeispiele demonstriert. Die Rolle von Golang im Front-End-Bereich ist effizient, prägnant und leicht zu erlernen
