Code zwischen VUE -Komponenten teilen? Wenn Sie mit Vue 2 vertraut sind, haben Sie m?glicherweise Mixin verwendet, um dies zu erreichen. Die neue Kompositions -API (jetzt als Plugin für Vue 2 erh?ltlich und eine bevorstehende Funktion von Vue 3) bietet eine bessere L?sung.
In diesem Artikel werden die M?ngel von Mixin untersucht und verstehen, wie die Kompositions -API diese M?ngel überwindet und VUE -Anwendungen skalierbarer macht.
Kurze Beschreibung von Mixin
Lassen Sie uns den Mixin -Modus schnell überprüfen, da er im n?chsten Abschnitt entscheidend für das ist, was wir abdecken werden.
Typischerweise wird die VUE -Komponente durch ein JavaScript -Objekt definiert, das verschiedene Eigenschaften enth?lt, die die Funktionen darstellen, die wir implementieren müssen - wie Daten, Methoden, berechnete Eigenschaften usw.
// mycomponent.js Standard ausführen { Daten: () => ({{{ mydataproperty: null }), Methoden: { myMethod () {...} } // ... }
Wenn wir die gleichen Eigenschaften zwischen Komponenten teilen m?chten, k?nnen wir die gemeinsamen Eigenschaften in ein separates Modul extrahieren:
// mymixin.js Standard ausführen { Daten: () => ({{{ myshareddataproperty: null }), Methoden: { mysharedMethod () {...} } }
Jetzt k?nnen wir diesen Mixin jeder Komponente hinzufügen, die es verwendet, indem wir es der Mixin -Konfigurationseigenschaft zuweisen. Zur Laufzeit verschmilzt Vue die Eigenschaften der Komponente mit jedem zus?tzlichen Mixin.
// ConsumingComponent.js importieren mymixin aus "./mymixin.js"; Standard ausführen { Mixins: [Mymixin], Daten: () => ({{{ MyLocaldataproperty: NULL }), Methoden: { MyLocalMethod () {...} } }
Für dieses spezielle Beispiel lautet die von der Laufzeit verwendete Komponentendefinition wie folgt:
Standard ausführen { Daten: () => ({{{ myshareddataproperty: null, MyLocaldataproperty: NULL }), Methoden: { mysharedMethod () {...}, MyLocalMethod () {...} } }
Mixin gilt als "sch?dlich"
Bereits Mitte 2016 schrieb Dan Abramov ?Mixins als sch?dlich angesehen“, in dem er glaubte, dass die Verwendung von Mixins in React-Komponenten zur Wiederverwendung der Logik ein Anti-Muster ist und sich dafür einsetzte, sie zu vermeiden.
Leider gelten die M?ngel, die er über React Mixin erw?hnte, auch für VUE. Bevor wir verstehen, wie die Kompositions -API diese M?ngel überwindet, schauen wir uns diese M?ngel an.
Benennung von Konflikten
Wir sehen, wie der Mixin -Modus zur Laufzeit zwei Objekte verschmelzen. Was passiert, wenn sie alle eine Eigenschaft mit demselben Namen teilen?
const mixin = { Daten: () => ({{{ MyProp: Null }) } Standard ausführen { Mixins: [Mixin], Daten: () => ({{{ // den gleichen Namen! MyProp: Null }) }
Hier kommt die Fusionsstrategie ins Spiel. Dies ist eine Reihe von Regeln, um festzustellen, was passiert, wenn eine Komponente mehrere Optionen mit demselben Namen enth?lt.
Die Standard (aber konfigurierbare) Merge -Richtlinie von VUE -Komponenten sieht vor, dass lokale Optionen Mixinoptionen überschreiben. Aber es gibt Ausnahmen. Wenn wir beispielsweise mehrere Lebenszyklushaken desselben Typs haben, werden diese Haken zum Hakenarray hinzugefügt und alle Haken werden nacheinander aufgerufen.
Auch wenn wir keine tats?chlichen Fehler begegnen, kann es immer schwieriger sein, Code zu schreiben, wenn sie mit den benannten Eigenschaften zwischen mehreren Komponenten und Mischungen umgehen. Dies ist besonders schwierig, wenn ein Mixin von Drittanbietern als NPM-Paket und seine benannten Eigenschaften, die Konflikte verursachen k?nnen,.
Implizite Abh?ngigkeit
Es gibt keine hierarchische Beziehung zwischen Mixin und den Komponenten, die es verwenden. Dies bedeutet, dass die Komponente Dateneigenschaften verwenden kann, die im Mixin definiert sind (z. B. MySharedDataproperty), aber das Mixin kann es auch unter der Annahme von Dateneigenschaften verwenden, die in der Komponente definiert sind (z. B. MyLocaldataproperty). Dies ist üblich, wenn Mixin verwendet wird, um die Eingabevalidierung zu teilen. Das Mixin kann erwarten, dass die Komponente einen Eingangswert hat, der in seiner eigenen Validierungsmethode verwendet wird.
Dies kann jedoch Probleme verursachen. Was passiert, wenn wir die Komponente sp?ter neu aufstellen und den Namen der vom Mixin erforderlichen Variablen ?ndern m?chten? Wir werden keine Probleme aus den Komponenten bemerken. Der Codeinspektor wird es auch nicht finden. Wir werden nur zur Laufzeit Fehler sehen.
Stellen Sie sich nun eine Komponente vor, die viele Mixins enth?lt. K?nnen wir lokale Dateneigenschaften neu aufstellen oder werden wir den Mixin brechen? Welcher Mixin? Wir müssen manuell nach allen Mixins suchen, um zu wissen.
Migrieren Sie von Mixin
Der Artikel von Dan bietet Alternativen zum Mischen, einschlie?lich fortschrittlicher Komponenten, Versorgungsmethoden und einigen anderen Komponentenkombinationsmustern.
W?hrend VUE in vielerlei Hinsicht der Reaktion ?hnlich ist, wandelt sich das alternative Muster, das er vorschl?gt, nicht gut in Vue um. Obwohl dieser Beitrag Mitte 2016 geschrieben wurde, haben VUE-Entwickler seitdem Mixin-Probleme.
Bisher. Die Nachteile von Mixin sind einer der Hauptmotivationsfaktoren für die Zusammensetzung API. Bevor Sie verstehen, wie es das Mixinproblem überwindet, schauen wir uns einen kurzen Blick darauf an, wie es funktioniert.
Zusammensetzung API -Crashkurs
Die Schlüsselidee der Zusammensetzung API ist, dass sie als Objekteigenschaften als JavaScript -Variablen definiert werden, die aus der neuen Setup -Funktion zurückgegeben werden, anstatt die Funktionen von Komponenten (wie Zust?nden, Methoden, berechnete Eigenschaften usw.) als Objekteigenschaften zu definieren.
Hier ist ein klassisches Beispiel für eine Vue 2 -Komponente, die unter Verwendung der Kompositions -API definiert ist, die eine "Z?hler" -Funktion definiert:
//Counter.vue Standard ausführen { Daten: () => ({{{ Graf: 0 }), Methoden: { Increment () { this.count; } }, berechnet: { doppelt () { kehre dies zurück. Count * 2; } } }
Hier sind genau die gleichen Komponenten, die mit der Kompositions -API definiert sind.
// counter.vue import {ref, berechnet} aus "Vue"; Standard ausführen { aufstellen() { const count = ref (0); const double = berechnet (() => count.Value * 2) Funktion increment () { Graf.Value; } zurückkehren { z?hlen, doppelt, Inkrement } } }
Sie werden zun?chst feststellen, dass wir die Ref -Funktion importiert haben, mit der wir eine reaktionsschnelle Variable definieren k?nnen, die fast die gleiche Funktion wie eine Datenvariable hat. Gleiches gilt für die computergestützte Funktion.
Die Inkrementmethode reagiert nicht an und kann daher als normale JavaScript -Funktion deklariert werden. Beachten Sie, dass wir den Sub -Property -Wert ?ndern müssen, um den Wert der z?hlenden Variablen zu ?ndern. Dies liegt daran, dass reaktionsschnelle Variablen, die mit Ref erstellt wurden, Objekte sein müssen, um ihre Reaktionsf?higkeit bei der übergabe aufrechtzuerhalten.
Es ist am besten, die Vue -Komposition -API -Dokumentation zu konsultieren, um ein detailliertes Verst?ndnis der Funktionsweise von Ref zu tun.
Nachdem wir diese Funktionen definiert haben, geben wir sie aus der Setup -Funktion zurück. Es gibt keinen Unterschied in den Funktionen der beiden oben genannten Komponenten. Wir haben nur die alternative API verwendet.
TIPP: Die Kompositions-API ist die Kernfunktion von Vue 3, aber Sie k?nnen auch das NPM-Plugin @vue/composition-api in Vue 2 verwenden.
Codeextraktion
Der erste offensichtliche Vorteil der Kompositions -API ist die einfache Extraktion der Logik.
Verwenden wir die Kompositions -API, um die oben definierten Komponenten neu zu refaktieren, damit die von uns definierte Funktionalit?t im JavaScript -Modul usecounter befindet. (Das Pr?fix "Verwendung" als Funktionsbeschreibung ist die Namenskonvention der Zusammensetzung API.)
// usecounter.js import {ref, berechnet} aus "Vue"; Standardfunktion exportieren () { const count = ref (0); const double = berechnet (() => count.Value * 2) Funktion increment () { Graf.Value; } zurückkehren { z?hlen, doppelt, Inkrement } }
Code -Wiederverwendung
Um diese Funktion in einer Komponente zu verwenden, importieren wir das Modul einfach in die Komponentendatei und rufen sie auf (beachten Sie, dass der Import eine Funktion ist). Dadurch werden die von uns definierten Variablen zurückgegeben, die wir dann aus der Setup -Funktion zurückgeben k?nnen.
// mycomponent.js usecounter von "./uSecounter.js" importieren; Standard ausführen { aufstellen() { const {count, double, Increment} = usecounter (); zurückkehren { z?hlen, doppelt, Inkrement } } }
Zuerst scheint dies ein bisschen lang und bedeutungslos zu sein, aber lassen Sie uns sehen, wie dieses Muster das Mixinproblem überwindet, das wir zuvor gesehen haben.
Benennung von Konflikten ... gel?st!
Wir haben zuvor gesehen, dass Mixin Eigenschaften verwenden kann, die den gleichen Namen wie die in der Verwendungskomponente oder sogar konsequenter sind wie die in anderen Mixin, die von der Verwendung von Komponente verwendet werden.
Dieses Problem existiert nicht in der Kompositions -API, da wir einen aus der Kompositierungsfunktion zurückgegebenen Zustand oder eine Methode explizit benennen müssen:
Standard ausführen { aufstellen () { const {somevar1, somemethod1} = useCompfunction1 (); const {somevar2, somemethod2} = useCompfunction2 (); zurückkehren { irgendwelchevar1, Somemethod1, irgendwelchevar2, Somemethod2 } } }
Die Namenskonflikte werden auf die gleiche Weise wie jede andere JavaScript -Variable gel?st.
Implizite Abh?ngigkeit ... gel?st!
Wir haben auch gesehen, dass Mixin Dateneigenschaften verwenden kann, die auf Komponenten definiert sind, was den Code zerbrechlich und schwer zu verstehen macht.
Kombinationsfunktionen k?nnen auch lokale Variablen aufrufen, die in Komponenten definiert sind. Der Unterschied besteht jedoch darin, dass diese Variable nun explizit an die kombinierte Funktion übergeben werden muss.
usecompfitction von "./uSecompfunction" importieren; Standard ausführen { aufstellen () { // ein lokaler Wert, der für die Kombinationsfunktion konstant mylocalval = ref (0) verwendet werden muss; // Es muss explizit als Parameter const {...} = useCompfunction (myLocalVal) übergeben werden; } }
Zusammenfassen
Der Mixin -Modus sieht auf der Oberfl?che sehr sicher aus. Da es jedoch die Verwundbarkeit des Codes und die Art und Weise erh?ht, wie es die F?higkeit zum Verst?ndnis von Funktionen maskiert, wird das Freigeben von Code durch Zusammenführen von Objekten zu einem Anti-Muster.
Das cleverste an der Kompositions -API ist, dass VUE auf Sicherheitsma?nahmen, die in natives JavaScript integriert sind, zum Freigeben von Code, wie z. B. Variablen an Funktionen und Modulsysteme, integriert werden k?nnen.
Bedeutet dies, dass die Kompositions -API Vues klassischer API in jeder Hinsicht überlegen ist? Nein. In den meisten F?llen k?nnen Sie sich an die klassische API halten. Wenn Sie jedoch vorhaben, Ihren Code wiederzuverwenden, ist die Kompositions -API zweifellos eine bessere Wahl.
Das obige ist der detaillierte Inhalt vonWie die Vue -Komposition -API Vue Mixins ersetzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

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

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

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Es gibt drei M?glichkeiten, einen CSS -Laderotator zu erstellen: 1. Verwenden Sie den Basisrotator der Grenzen, um eine einfache Animation durch HTML und CSS zu erreichen. 2. Verwenden Sie einen benutzerdefinierten Rotator mit mehreren Punkten, um den Sprungeffekt durch verschiedene Verz?gerungszeiten zu erreichen. 3. Fügen Sie einen Rotator in die Taste hinzu und wechseln Sie den Klassen über JavaScript, um den Ladestatus anzuzeigen. Jeder Ansatz betont die Bedeutung von Entwurfsdetails wie Farbe, Gr??e, Zug?nglichkeit und Leistungsoptimierung, um die Benutzererfahrung zu verbessern.

Um mit CSS -Browser -Kompatibilit?t und Pr?fixproblemen umzugehen, müssen Sie die Unterschiede im Browser -Support verstehen und Anbieterpr?fixe vernünftigerweise verwenden. 1. Verstehen Sie gemeinsame Probleme wie Flexbox und Grid -Unterstützung, Position: Sticky Invaly und Animationsleistung ist unterschiedlich. 2. überprüfen Sie den Best?tigungsunterstützungsstatus von Caniuse. 3. Verwenden Sie korrekt -webkit-, -moz-, -ms-, -o- und andere Herstellerpr?fixe; 4. Es wird empfohlen, Autoprefixer zu verwenden, um automatisch Pr?fixe hinzuzufügen. 5. Postcss installieren und Browserlist konfigurieren, um den Zielbrowser anzugeben. 6. automatisch die Kompatibilit?t w?hrend des Baus bew?ltigen; 7. Modernizr -Erkennungsmerkmale k?nnen für alte Projekte verwendet werden; 8. Keine Notwendigkeit, die Konsistenz aller Browser zu verfolgen,

ThemaNDiffercesbetweenplay: Inline, Block, Andinline-Blockinhtml/CsSarelayoutBehavior, Spaceusage und Stylingcontrol.1.inlineelementsflowwithtext, Don'tstartonNewlines, Ignorewidth/HeighthThorchingstyhorching-/idelthorchorching/ardaldhordhortaliTalding/ardaldhordelthortex

Durch das Festlegen des von Ihnen besuchten Links k?nnen Sie die Benutzererfahrung verbessern, insbesondere in inhaltsintensiven Websites, um den Benutzern dabei zu helfen, sich besser zu navigieren. 1. Verwenden Sie CSS: Besuchte Pseudoklasse, um den Stil des besuchten Links wie Farb?nderungen zu definieren. 2. Beachten Sie, dass der Browser nur eine ?nderung einiger Attribute aufgrund von Datenschutzbeschr?nkungen erm?glicht. 3. Die Farbauswahl sollte mit dem Gesamtstil koordiniert werden, um abrupte abrupt zu werden. 4. Das mobile Terminal zeigt diesen Effekt m?glicherweise nicht an. Es wird empfohlen, ihn mit anderen visuellen Eingabeaufforderungen wie Icon -Auxiliary -Logos zu kombinieren.

Verwenden Sie das Clip-Pfad-Attribut von CSS, um Elemente in benutzerdefinierte Formen wie Dreiecke, kreisf?rmige Kerben, Polygone usw. zu erregen, ohne sich auf Bilder oder SVGs zu verlassen. Zu den Vorteilen geh?ren: 1.. Unterstützt eine Vielzahl von Grundformen wie Circle, Ellipse, Polygon usw.; 2. reagierende Anpassung und anpassbar an mobile Terminals; 3. Einfach zu animation und kann mit Hover oder JavaScript kombiniert werden, um dynamische Effekte zu erzielen. 4. Es wirkt sich nicht auf den Layoutfluss aus und erfüllt nur den Anzeigebereich. H?ufige Verwendungen sind z. B. kreisf?rmiger Clip-Pfad: Kreis (50pxatcenter) und Dreieck-Clip-Pfad: Polygon (50%0%, 100 0%, 0 0%). Beachten

Um reaktionsschnelle Bilder mit CSS zu erstellen, kann es haupts?chlich durch die folgenden Methoden erreicht werden: 1. Verwenden Sie maximale Breite: 100% und H?he: Auto, damit das Bild an die Containerbreite anpasst und gleichzeitig den Anteil beibeh?lt. 2. Verwenden Sie die SRCSet- und Gr??enattribute von HTML, um die an verschiedenen Bildschirme angepassten Bildquellen intelligent zu laden. 3.. Verwenden Sie Objektfit und Objektposition, um die Bildaufbindung und Fokusanzeige zu steuern. Gemeinsam stellen diese Methoden sicher, dass die Bilder auf verschiedenen Ger?ten klar und wundersch?n pr?sentiert werden.

Die Auswahl der CSS -Einheiten h?ngt von den Entwurfsanforderungen und den reaktionsschnellen Anforderungen ab. 1.PX wird für die feste Gr??e verwendet, geeignet für eine pr?zise Kontrolle, aber mangelnde Elastizit?t; 2.Em ist eine relative Einheit, die leicht durch den Einfluss des übergeordneten Elements verursacht wird, w?hrend REM basierend auf dem Wurzelelement stabiler ist und für die globale Skalierung geeignet ist. 3.VW/VH basiert auf der Ansichtsfenstergr??e, die für das reaktionsschnelle Design geeignet ist. Die Leistung unter extremen Bildschirmen sollte jedoch Aufmerksamkeit geschenkt werden. 4. Bei der Auswahl sollte es ermittelt werden, ob reaktionsschnelle Anpassungen, Elementhierarchiebeziehungen und Ansichtsfensterabh?ngigkeit festgelegt werden. Angemessener Gebrauch kann die Layoutflexibilit?t und -wartung verbessern.

Verschiedene Browser weisen Unterschiede in der CSS -Analyse auf, was zu inkonsistenten Anzeigeeffekten führt, haupts?chlich die Differenzentscheidung, die Berechnung des Boxmodells, die Flexbox- und Raster -Layout -Unterstützung und das inkonsistente Verhalten bestimmter CSS -Attribute. 1. Die Standardstilverarbeitung ist inkonsistent. Die L?sung besteht darin, CSSReset oder Normalize.css zu verwenden, um den anf?nglichen Stil zu vereinen. 2. Die Box -Modellberechnung der alten Version von IE ist unterschiedlich. Es wird empfohlen, eine einheitliche Boxgr??e: Border-Box zu verwenden. 3. Flexbox und Grid führen in Kantenf?llen oder in alten Versionen unterschiedlich ab. Weitere Tests und verwenden Sie Autoprefixer; 4. Einige CSS -Attributverhalten sind inkonsistent. Caniuse muss konsultiert und herabgestuft werden.
