Heim >
Schlagzeilen >
Über 20 Vue-Klassiker-Interviewfragen (mit detaillierten Erklärungen auf Quellcode-Ebene)
Über 20 Vue-Klassiker-Interviewfragen (mit detaillierten Erklärungen auf Quellcode-Ebene)
青灯夜游
Freigeben: 2022-06-29 21:03:53
nach vorne
4756 Leute haben es durchsucht
Dieser Artikel fasst über 20 klassische Interviewfragen von Vue zusammen (mit detaillierten Erklärungen auf Quellcode-Ebene), um Ihnen dabei zu helfen, grundlegendes Wissen zu sortieren und Ihren Vue-Wissensvorrat zu erweitern. Es lohnt sich, sie zu sammeln. Schauen Sie vorbei!
01-Was sind die Kommunikationsmethoden zwischen Vue-Komponenten?
Vue ist ein komponentenbasiertes Entwicklungsframework, daher ist die Datenkommunikation zwischen Komponenten für Vue-Anwendungen sehr wichtig.
Diese Frage testet hauptsächlich die grundlegenden Vue-Kenntnisse und die Kenntnisse jedes Einzelnen im Umgang mit der grundlegenden API von Vue.
Anderes Grenzwissen wie „prove/inject/$attrs“ zeigt die Breite des Wissens des Interviewers.
Verschiedene Möglichkeiten, Parameter durch Komponenten zu übergeben
Denken Sie an die Analyse:
Überblick über alle bekannten Möglichkeiten
Erläutern Sie Nutzungsszenarien entsprechend Komponentenbeziehungen
Antwortbeispiel:
1. Es gibt 8 gängige Methoden der Komponentenkommunikation:
2. Es ist am klarsten und effektivsten, die Komponentenkommunikation basierend auf der Beziehung zwischen Komponenten zu diskutieren >$parent/ref/$attrs
03 – Beschreiben Sie kurz den Lebenszyklus von Vue und was in jeder Phase getan wird
Erforderliche Fragen, Testvue-Grundlagen.
Denken
Gibt Konzepte
Listet jede Phase des Lebenszyklus auf
Erklärt den Gesamtprozess
Kombiniert mit. Übung
Erweiterung: vue 3 Änderungen
Antwortbeispiel
1 Jede Vue-Komponenteninstanz durchläuft nach ihrer Erstellung eine Reihe von Initialisierungsschritten. Beispielsweise sind Datenbeobachtung, Vorlagenkompilierung, Mounten der Instanz im Dom und Aktualisieren erforderlich den Dom, wenn sich die Daten ändern. Während dieses Prozesses werden Funktionen ausgeführt, die als Lifecycle-Hooks bezeichnet werden, um Benutzern die Möglichkeit zu geben, in bestimmten Phasen ihren eigenen Code hinzuzufügen.
2. Der Vue-Lebenszyklus kann insgesamt in 8 Phasen unterteilt werden: vor und nach der Erstellung, vor und nach dem Laden, vor und nach der Aktualisierung, vor und nach der Zerstörung sowie den Lebenszyklus einiger spezieller Szenen. Drei neue Szenen zum Debuggen und serverseitigen Rendern wurden zu vue3 hinzugefügt.
Lebenszyklus v2
Lebenszyklus v3
Beschreibung
beforeCreate
beforeCreate
Wenn die Komponenteninstanz erstellt wird
create ed
erstellt
Die Komponenteninstanz wurde vollständig erstellt erstellt
beforeMount
beforeMount
Bevor die Komponente gemountet wird
montiert
montiert
Nachdem die Komponente in die Instanz gemountet wurde
beforeUpdate
be foreUpdate
Änderungen der Komponentendaten vor der Aktualisierung
aktualisiert
aktualisiert
Datendaten aktualisiert
beforeDestroy
beforeUnmount
Bevor die Komponenteninstanz zerstört wird
nicht gemountet
Nachdem die Komponenteninstanz zerstört wurde
Lifecycle v2
Lifecycle v3
Beschreibung
aktiviertaktiviert
Keep-Alive, wenn die zwischengespeicherte Komponente aktiviert ist
deaktiviert
deaktiviert
Keep-Alive zwischengespeicherte Komponenten deaktiviert. Wird aufgerufen, wenn
errorCaptured
errorCaptured
aufgerufen wird, wenn ein Fehler von einer untergeordneten Komponente erfasst wird
-
renderTriggered
Debug-Hook, wird aufgerufen, wenn eine reaktive Abhängigkeit ausgelöst wird
-
serverPrefetch
ssr nur, wird aufgerufen, bevor die Komponenteninstanz auf dem Server gerendert wird
Am Beispiel von Vue müssen Entwickler durch Datenreaktionsfähigkeit plus virtuelles DOM und Patch-Algorithmus nur Daten verwalten und sich um das Geschäft kümmern, ohne sich überhaupt mit mühsamen DOM-Vorgängen befassen zu müssen, wodurch die Entwicklungseffizienz erheblich verbessert und Entwicklungsschwierigkeiten verringert werden . Die Datenreaktionsfähigkeit in
vue2 wird je nach Datentyp unterschiedlich verarbeitet. Wenn es sich um ein -Objekt handelt, wird Object.defineProperty() verwendet, um das Abfangen von Daten zu definieren make Response; wenn es sich um ein Array handelt, antwortet es, indem es die 7 Änderungsmethoden des Array-Objekt-Prototyps überschreibt, sodass diese Methoden zusätzliche Aktualisierungsbenachrichtigungen bereitstellen können. Dieser Mechanismus löst das Problem der Datenreaktion sehr gut, weist jedoch auch einige Mängel bei der tatsächlichen Verwendung auf: Beispielsweise führt das rekursive Durchlaufen während der Initialisierung zu Leistungseinbußen, sodass Benutzer nur Vue.set/delete verwenden müssen Spezielle APIs können wirksam werden; Probleme wie die neuen in es6 generierten Map- und Set-Datenstrukturen werden nicht unterstützt.
Um diese Probleme zu lösen, hat vue3 diesen Teil der Implementierung neu geschrieben: Die Verwendung des Proxy-Proxys von ES6 zur Reaktion auf die Daten bietet viele Vorteile, die Programmiererfahrung ist konsistent und es besteht keine Notwendigkeit, spezielle APIs zu verwenden Die Initialisierungsleistung und der Speicherverbrauch wurden erheblich verbessert. Da der reaktionsfähige Implementierungscode außerdem in ein unabhängiges Reaktivitätspaket extrahiert wird, können wir ihn flexibler verwenden und Erweiterungen von Drittanbietern können flexibler entwickelt werden.
09 – Erzählen Sie mir etwas über Ihr Verständnis von virtuellem DOM?
Analyse
Fast alle vorhandenen Frameworks führen virtuelles DOM ein, um das reale DOM zu abstrahieren, das jetzt als VNode und VDOM bekannt ist. Warum müssen wir also virtuelles DOM einführen? Beantworten Sie einfach diese Frage!
Denken
Was ist vdom? Die Vorteile der Einführung von vdom
Antwortbeispiel
Virtual Dom ist, wie der Name schon sagt, ein virtuelles Dom-Objekt, das selbst ein
-Objekt ist, aber eine Ansichtsstruktur durch verschiedene Attribute beschreibt.
Durch die Einführung von vdom können wir die folgenden Vorteile erzielen:
Abstrahieren Sie echte Elementknoten in VNodes, wodurch die Anzahl der direkten Operationen auf dem Dom effektiv reduziert und dadurch die Programmleistung verbessert wird.
Es gibt Einschränkungen für die direkte Bedienung dom, wie zum Beispiel: Diff, Klonen und andere Vorgänge, es gibt viele Inhalte für ein reales Element. Wenn Sie einen Diff-Vorgang direkt darauf ausführen, werden einige unnötige Inhalte ebenfalls differenziert, wenn Sie sie klonen müssen Es ist auch nicht notwendig, den gesamten Inhalt zu kopieren. Wenn Sie diese Vorgänge jedoch auf JavaScript-Objekte verschieben, wird es einfacher.
Operation Dom ist eine relativ teure Operation. Durch abstrakte VNode für die Zwischenverarbeitung kann jedoch die Anzahl der direkten Dom-Operationen effektiv reduziert werden, wodurch das Neuzeichnen und Reflow der Seite reduziert wird. JavaScript
Erleichtert die plattformübergreifende Implementierung
Derselbe VNode-Knoten kann in entsprechende Inhalte auf verschiedenen Plattformen gerendert werden. Beispiel: Das Rendern im Browser ist ein Dom-Elementknoten, das Rendern in Native (iOS, Android) wird zum entsprechende Steuerung, kann SSR implementieren, in WebGL rendern usw.
Vue3 ermöglicht Entwicklern die Implementierung benutzerdefinierter Renderer basierend auf VNode, um das Rendern für verschiedene Plattformen zu erleichtern.
Wie erstelle ich VDOM? In Vue schreiben wir häufig Vorlagen für Komponenten. Diese Vorlage wird vom Compiler in eine Rendering-Funktion kompiliert. Die Render-Funktion wird während des nachfolgenden Mount-Prozesses aufgerufen und das zurückgegebene Objekt ist der virtuelle Dom. Sie sind jedoch noch kein echtes DOM und werden daher im nachfolgenden Patch-Prozess weiter in DOM umgewandelt.
Nachdem der Montagevorgang abgeschlossen ist, tritt das Vue-Programm in den Aktualisierungsprozess ein. Wenn sich einige reaktionsfähige Daten ändern, wird die Komponente erneut gerendert. Zu diesem Zeitpunkt wird ein neues VDOM generiert, und die Änderungen können durch Differenzieren des letzten Rendering-Ergebnisses erhalten werden, wodurch es in eine minimale DOM-Menge umgewandelt wird Betriebsabläufe und effiziente Aktualisierungen.
Erforderliche Fragen, einschließlich Vue-Update-Prinzipien, vergleichende Prüfung der Tiefe des Verständnisses.
Denken
Was macht der Diff-Algorithmus? Die Notwendigkeit davon
Wenn er ausgeführt wird Die spezifische Ausführungsmethode
Raise oben: Schauen wir uns die Optimierung in vue3 an Um ein echtes DOM zu erstellen, müssen Sie die Patch-Methode Convert verwenden.
2. Zu Beginn verfügt jede Abhängigkeit in der Vue1.x-Ansicht über eine entsprechende Aktualisierungsfunktion, die eine genaue Aktualisierung des virtuellen DOM und des Patch-Algorithmus ermöglichen kann. Eine solch feine Granularität macht Vue1.x jedoch nicht möglich um größere Anwendungen zu übertragen; Um die Watcher-Granularität in Vue 2.x zu reduzieren, muss jede Komponente nur einen entsprechenden Watcher haben. Zu diesem Zeitpunkt muss ein Patch-Algorithmus eingeführt werden, um die Änderungen genau zu finden und effizient zu aktualisieren.
3. Der Moment, in dem diff in Vue ausgeführt wird, ist, wenn die reagierende Datenänderung in der Komponente die Ausführung der Aktualisierungsfunktion der Instanz auslöst. Die Aktualisierungsfunktion führt die Renderfunktion erneut aus, um das neueste virtuelle DOM zu erhalten, und führt dann die aus Patch-Funktion und übergeben Sie die neuen und alten virtuellen Werte, finden Sie die Änderungen durch Vergleich der beiden und konvertieren Sie sie schließlich in entsprechende DOM-Operationen.
4. Der Patch-Prozess ist ein rekursiver Prozess und folgt der Strategie des Tiefenvergleichs und des Vergleichs auf derselben Ebene:
Bestimmen Sie zunächst, ob die beiden Knoten vom gleichen Knotentyp sind, falls dies der Fall ist unterschiedlich, löschen und neu erstellen
Wenn beide Parteien Text sind, wird der Textinhalt aktualisiert
Wenn beide Parteien Elementknoten sind, werden die untergeordneten Elemente rekursiv aktualisiert und die Elementattribute werden gleichzeitig aktualisiert Beim Aktualisieren von untergeordneten Knoten gibt es mehrere Situationen: Der neue untergeordnete Knoten ist Text, der alte ist. Wenn der untergeordnete Knoten ein Array ist, löschen Sie ihn und legen Sie den Text fest.
Wenn der neue untergeordnete Knoten Text ist, und der alte Untergeordneter Knoten ist Text, aktualisieren Sie den Text direkt.
Wenn der neue untergeordnete Knoten ein Array ist und der alte untergeordnete Knoten Text ist, löschen Sie den Text und erstellen Sie die untergeordneten Elemente im neuen untergeordneten Knoten-Array Knoten ist ein Array, und der alte untergeordnete Knoten ist ebenfalls ein Array. Vergleichen Sie dann die beiden Sätze von untergeordneten Knoten und aktualisieren Sie die Details. blabla
5 In vue3 eingeführte Aktualisierungsstrategie: Optimierung der Kompilierungszeit von PatchFlags, Blöcken usw .
Die bemerkenswertesten neuen Funktionen sind auf der offiziellen Website aufgeführt: https://v3-migration.vuejs .org/
Das heißt, das Folgende:
Composition API
SFC Composition API syntaktischer Zucker
Teleport-Portal
Fragmente Fragmente
Emittiert OptionenBenutzerdefinierter Renderer.
SFC CSS-VariablenSpannung Das Obige bezieht sich auf die API, und es gibt viele Framework-Funktionen, die nicht ausgelassen werden dürfen.
Antwortbeispiele1. Zu den neuen Funktionen von Vue3 auf API-Ebene gehören hauptsächlich: Composition API, SFC Composition API Syntax Sugar, Teleport-Portal, Fragmente, Emits-Optionen, benutzerdefinierter Renderer, SFC-CSS-Variablen, Suspense ?? Reaktionsfähigkeitssystem Kleiner: Bessere Tree-Shaking-Optimierung Einfacher zu warten: TypeScript + Modular Einfacher zu erweitern Unabhängiges reaktionsfähiges Modul
12 – Wie definiere ich dynamisches Routing? Wie erhalte ich die übergebenen dynamischen Parameter?
Analyse
API-Fragen, grundlegende Fähigkeiten testen, kein Raum für Fehler, versuchen Sie, so detailliert wie möglich zu sein.
Denken
Was ist dynamisches Routing? Wann dynamisches Routing verwenden, wie dynamisches Routing definiert werden soll
Antwortbeispiel
Oft müssen wir
Routen für ein bestimmtes passendes Muster derselben Komponente zuordnen
In diesem Fall müssen wir dynamisches Routing definieren.
Zum Beispiel könnten wir eine Benutzer-Komponente haben, die für alle Benutzer gerendert werden soll, jedoch mit unterschiedlichen Benutzer-IDs. In Vue Router können wir dazu ein dynamisches Feld im Pfad verwenden, zum Beispiel: { path: '/users/:id', Komponente: Benutzer }, wobei :id< /code> ist der Pfadparameter<span style="font-size: 18px;"></span></strong></p><em>Pfadparameter</em> wird durch Doppelpunkt <code>: dargestellt. Wenn eine Route abgeglichen wird, wird der Wert ihrer params in jeder Komponente als this.$route.params angezeigt.
Es können mehrere Parameter vorhanden sein, z. B. /users/:username/posts/:postId zusätzlich zu $route.params, $route Das -Objekt stellt auch andere nützliche Informationen bereit, wie z. B. $route.query, $route.hash usw.
Mögliche Folgefragen
User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,例如:{ path: '/users/:id', component: User },其中:id就是路径参数
So reagieren Sie auf Änderungen der dynamischen Routing-Parameter
https://router.vuejs.org /zh/guide /essentials/dynamic-matching.html#Reaktion auf Änderungen der Routing-Parameter
Wie gehen wir mit 404 Not Found Routing um?
https://router.vuejs.org/zh/guide/essentials /dynamic-matching.html #Alle Routen erfassen oder -404-not-found-route
13-Wenn Sie gebeten wurden, eine Vue-Route von Grund auf zu schreiben, sagen Sie es mir Ihre Ideen
Ideenanalyse:
Denken Sie zunächst über das Problem nach, das Vue Routing lösen muss: Der Benutzer klickt auf den Sprunglink, um den Inhalt zu wechseln, und die Seite wird nicht aktualisiert.
Verwenden Sie die Hash- oder Verlaufs-API, um eine URL-Sprungseite ohne Aktualisierung zu realisieren.
Gleichzeitig hören Sie sich das Hashchange-Ereignis oder das Popstate-Ereignis an, um den Sprung zu verarbeiten.
Ordnen Sie die entsprechende Komponente aus der Routentabelle entsprechend dem Hash-Wert oder Statuswert zu und rendern
Beispielantwort: Das Problem, das das Routing einer SPA-Anwendung lösen muss, ist
Der Seitensprunginhalt ändert sich ohne Aktualisierung
Gleichzeitig muss auch das Routing vorhanden sein in Form eines Plug-Ins, also:
Zuerst definiere ich eine < Die Funktion code>createRouter gibt die Router-Instanz zurück. Sie führt mehrere Dinge innerhalb der Instanz aus:
Speichern der Konfigurationselemente vom Benutzer übergeben
Hash- oder Popstate-Ereignisse abhören
Passen Sie die entsprechende Route entsprechend dem Pfad im Rückruf an
Definieren Sie den Router als Vue-Plug-In, implementieren Sie also die Installationsmethode und führen Sie dies aus zwei Dinge intern: Implementieren Sie zwei globale Komponenten: Router-Link und Router-View, die einen Seitensprung bzw. eine Inhaltsanzeige implementieren.
Definieren Sie zwei globale Variablen: $route und $router. Auf die aktuelle Route und die Router-Instanz kann zugegriffen werden innerhalb der Komponente
https://github1s.com/vuejs/router/blob/HEAD/src/history/html5.ts#L314 -L315RouterView🎜🎜🎜Seitensprung RouterLink🎜🎜🎜 https://github1s.com/vuejs/router/blob/HEAD/src/RouterLink.ts#L184-L185🎜🎜🎜Inhaltsanzeige RouterView🎜🎜🎜https://github1s.com/vuejs/router/blob/HEAD/ src/RouterView.ts#L43-L44🎜🎜🎜🎜14-Können Sie mir etwas über die Funktion der Taste sagen? 🎜🎜🎜🎜🎜Analyse: 🎜🎜🎜🎜Dies ist eine besonders häufig gestellte Frage. Sie testet hauptsächlich die Beherrschung des virtuellen DOM und der Patch-Details und kann den Grad des Verständnisses des Interviewers widerspiegeln. 🎜🎜🎜🎜Think-Analyse: 🎜🎜🎜🎜🎜🎜Die Schlussfolgerung ist, dass die Rolle des Schlüssels darin besteht, die Patch-Leistung zu optimieren. 🎜🎜🎜🎜Die Notwendigkeit des Schlüssels Quelle Code Beschreiben Sie, wie Vue feststellt, ob zwei Knoten gleich sind🎜
// 首次循环patch A
A B C D E
A B F C D E
// 第2次循环patch B
B C D E
B F C D E
// 第3次循环patch E
C D E
F C D E
// 第4次循环patch D
C D
F C D
// 第5次循环patch C
C
F C
// oldCh全部处理结束,newCh中剩下的F,创建F并插入到C前面
// 首次循环patch A
A B C D E
A B F C D E
// 第2次循环patch B
B C D E
B F C D E
// 第3次循环patch E
C D E
F C D E
// 第4次循环patch D
C D
F C D
// 第5次循环patch C
C
F C
// oldCh全部处理结束,newCh中剩下的F,创建F并插入到C前面
Verwenden Sie V-HTML, :url, :style usw. sorgfältig, um die Injektion von HTML, URL, Stil usw. zu vermeiden.
usw.
21 – Eine kurze Beschreibung Erklärung Verstehen Sie Vuex? „Denken“ persönliche Gedanken, praktische Erfahrungen usw.
Beispiel
Vuex ist ein
Statusverwaltungsmuster + Bibliothek
, das speziell für Vue.js-Anwendungen entwickelt wurde. Es verwendet einen zentralen Speicher, um den Status aller Komponenten der Anwendung zu verwalten, und stellt mithilfe entsprechender Regeln sicher, dass sich der Status auf vorhersehbare Weise ändert.
Wir freuen uns darauf, Anwendungen auf eine einfache Art und Weise des „unidirektionalen Datenflusses“ zu verwalten, d. h. in einer Einwegschleife von Zustand -> Ansicht -> Betrieb. Wenn unsere Anwendung jedoch auf „mehrere Komponenten mit gemeinsamem Status“ stößt, zum Beispiel: Mehrere Ansichten hängen von demselben Status ab oder Aktionen aus verschiedenen Ansichten müssen denselben Status ändern. Die Einfachheit des unidirektionalen Datenflusses kann an dieser Stelle leicht durchbrochen werden. Daher ist es für uns erforderlich, den gemeinsamen Status der Komponente zu extrahieren und ihn im globalen Singleton-Modus zu verwalten. Durch die Definition und Isolierung der verschiedenen Konzepte der Zustandsverwaltung und die Wahrung der Unabhängigkeit zwischen Ansichten und Zustand durch die Durchsetzung von Regeln wird unser Code strukturierter und wartbarer. Dies ist die Notwendigkeit für die Existenz von Vuex. Es ist das gleiche Konzept wie Redux im React-Ökosystem.
Vuex führt bei der Lösung des Zustandsmanagements viele Konzepte ein: wie Zustand, Mutation, Aktion usw. Ob es eingeführt werden muss, muss anhand der tatsächlichen Situation der Anwendung gemessen werden: Wenn Sie nicht vorhaben, ein zu entwickeln Bei einer großen einseitigen Anwendung wird stattdessen Vuex verwendet. Es ist umständlich und überflüssig, ein einfacher „Store-Modus“ reicht aus. Wenn Sie jedoch eine mittlere bis große Single-Page-Anwendung erstellen möchten, ist Vuex grundsätzlich der Standard.
Bei der Verwendung von Vuex verspüre ich etwas Blabla
Mögliche Fragen
Was sind die Nachteile von Vuex? Sind bei der Entwicklung Probleme aufgetreten?
Was ist der Unterschied zwischen Aktion und Mutation? Warum sie unterscheiden? 22-Sprechen Sie über den Prozess von der Vorlage bis zum Rendern.
Denken
Einführung in das Konzept des Vue-Compilers
Erklärung der Notwendigkeit eines Compilers
Erklärung des Compiler-Workflows
Antwortbeispiele
Vue Es gibt ein einzigartiges Compilermodul namens „Compiler“. Seine Hauptfunktion besteht darin, die vom Benutzer geschriebene Vorlage in eine ausführbare Renderfunktion in js zu kompilieren.
Der Grund, warum dieser Kompilierungsprozess erforderlich ist, besteht darin, Front-End-Programmierern das effiziente Schreiben von Ansichtsvorlagen zu erleichtern. Im Vergleich dazu verwenden wir immer noch lieber HTML zum Schreiben von Ansichten, was intuitiv und effizient ist. Die handgeschriebene Renderfunktion ist nicht nur ineffizient, sondern verliert auch Optimierungsmöglichkeiten zur Kompilierungszeit.
In Vue analysiert der Compiler zunächst die Vorlage. Anschließend wird ein JS-Objekt abgerufen und dann der Konvertierungsprozess durchgeführt AST wird transformiert und generiert schließlich den zuvor erhaltenen AST in JS-Code, der die Renderfunktion darstellt.
23-Was ist während des Montagevorgangs der Vue-Instanz passiert?
Richten Sie einen Update-Mechanismus ein
Machen Sie einfach diese beiden Dinge klar!
Antwortbeispiel
Der Montageprozess bezieht sich auf den Prozess app.mount(). Dieser Prozess führt im Allgemeinen zwei Dinge aus: Initialisierung und Einrichten eines Aktualisierungsmechanismus
Initialisierung erstellt Komponenteninstanzen und initialisiert den Komponentenstatus data
Einrichten eines Aktualisierungsmechanismus. Dadurch wird die Komponenten-Rendering-Funktion zum ersten Mal ausgeführt und gleichzeitig der Patch ausgeführt, um den zuvor erhaltenen Vnode auszuführen Die Renderfunktion erstellt zum ersten Mal ihre internen Daten. Die Abhängigkeit zwischen reaktionsfähigen Daten und Komponentenaktualisierungsfunktionen ermöglicht die Ausführung der entsprechenden Aktualisierungsfunktion, wenn sich die Daten in Zukunft ändern.
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn