Dies ist eine bewährte Methode, die ich bei der Arbeit an Vue-Projekten mit großen Codebasen entwickelt habe. Diese Tipps helfen Ihnen dabei, effizienteren Code zu entwickeln, der einfacher zu verwalten und weiterzugeben ist. Während meiner freiberuflichen Tätigkeit in diesem Jahr hatte ich die Gelegenheit, an einigen groß angelegten Vue-Anwendungen zu arbeiten. Die Projekte, von denen ich spreche, haben mehr als 12 Vuex-Stores, eine große Anzahl von Komponenten (manchmal Hunderte) und viele Ansichten (Seiten). Für mich war es tatsächlich eine sehr lohnende Erfahrung, da ich viele interessante Muster entdeckt habe, um den Code erweiterbar zu machen. Ich musste auch einige schlechte Praktiken beheben, die zum berühmten Spaghetticode-Problem führten Deshalb werde ich Ihnen heute die 10 besten Vorgehensweisen verraten, die Sie meiner Meinung nach befolgen sollten, wenn Sie mit einer großen Codebasis arbeiten. 1. Nutzen Sie Slots, um Komponenten verständlicher und leistungsfähiger zu machenEines Tages musste ich einfach ein Popup erstellen. Auf den ersten Blick gibt es nichts wirklich Kompliziertes, nur einen Titel, eine Beschreibung und einige Schaltflächen. Ich werde also alles als Attribute behandeln. Schließlich habe ich drei Eigenschaften verwendet, um die Komponente so anzupassen, dass sie ein Ereignis ausgibt, wenn jemand auf die Schaltfläche klickt. So einfach geht das! :schwitzendes Lächeln: Als das Projekt jedoch weiter wuchs, bat uns das Team, viele weitere neue Dinge darin anzuzeigen: Formularfelder, verschiedene Schaltflächen (je nachdem, auf welcher Seite sie angezeigt wurden), Karten, Fußzeilen und Listen. Ich habe festgestellt, dass es anscheinend funktionierte, wenn ich weiterhin Eigenschaften verwendete, um diese Komponente zu erweitern. Aber Gott, :weary: ich habe mich geirrt! Die Komponente wurde schnell zu komplex, um sie zu verstehen, da sie unzählige Unterkomponenten enthielt, zu viele Eigenschaften verwendete und eine große Anzahl von Ereignissen ausgab. :volcano: Ich habe diese schreckliche Situation erlebt: Wenn man irgendwo eine Änderung vornimmt, führt dies irgendwie dazu, dass auf einer anderen Seite etwas anderes kaputt geht. Ich habe ein Frankenstein-Monster statt einer wartbaren Komponente gebaut! Wenn ich mich jedoch von Anfang an auf Spielautomaten verlassen hätte, wäre es möglicherweise besser gelaufen. Schließlich habe ich alles umgestaltet, um diese kleine Komponente bereitzustellen. Einfacher zu warten, schneller zu verstehen und viel skalierbarer! <Vorlage> <div Klasse="c-base-popup"> <div v-if="$slots.header" class="c-base-popup__header"> <slot name="header"> </div> <div v-if="$slots.subheader" class="c-base-popup__subheader"> <slot name="Unterheader"> </div> <div Klasse="c-base-popup__body"> <h1>{{ Titel }}</h1> <p v-if="Beschreibung">{{ Beschreibung }}</p> </div> <div v-if="$slots.actions" class="c-base-popup__actions"> <slot name="Aktionen"> </div> <div v-if="$slots.footer" class="c-base-popup__footer"> <slot name="Fußzeile"> </div> </div> </Vorlage> <Skript> exportiere Standard { Requisiten: { Beschreibung: Typ: Zeichenfolge, Standard: null }, Titel: Typ: Zeichenfolge, erforderlich: true } } } </script> Mein Punkt ist, dass die Erfahrung zeigt, dass Projekte, die von Entwicklern erstellt werden, die wissen, wann Slots zu verwenden sind, einen großen Einfluss auf ihre zukünftige Wartbarkeit haben. Dadurch wird die Anzahl der ausgegebenen Ereignisse verringert, der Code wird leichter verständlich und es ist mehr Flexibilität bei der Anzeige der gewünschten Komponenten möglich. Als Faustregel gilt: Wenn Sie die Eigenschaften einer untergeordneten Komponente in der übergeordneten Komponente duplizieren, sollten Sie von diesem Punkt an Slots verwenden. 2. Organisieren Sie Ihren Vuex-Store richtig Häufig beginnen neue
Dann erstellen sie ihren ersten Das Problem besteht darin, dass es beim Erstellen von Modulen kein einheitliches Muster gibt. Ich empfehle Ihnen jedoch dringend, darüber nachzudenken, wie Sie sie organisieren möchten. So wie ich es verstehe, ziehen es die meisten Entwickler vor, sie nach Funktionalität zu organisieren. Zum Beispiel:
Ich für meinen Teil finde sie leichter verständlich, wenn sie entsprechend dem Datenmodell organisiert sind, das sie aus der API extrahieren. Zum Beispiel:
Für welche Sie sich entscheiden, bleibt Ihnen überlassen. Das Einzige, was Sie bedenken müssen, ist, dass ein gut organisierter 3. Verwenden Sie Vuex Actions, um API-Aufrufe zu tätigen und Daten zu übermitteln Die meisten, wenn nicht alle meiner API-Aufrufe werden in meinen Einfach, weil die meisten von ihnen Daten extrahieren, die ich im Speicher (
Übersetzungshinweis: 4. Verwenden Sie mapState, mapGetters, mapMutations und mapAction, um die Codebasis zu vereinfachen Normalerweise ist es nicht erforderlich, mehrere berechnete Eigenschaften oder Methoden zu erstellen, wenn Sie nur auf // NPM importiere { mapState, mapGetters, mapActions, mapMutations } von „vuex“; Standard exportieren { berechnet: { // Auf Root-Eigenschaften zugreifen ...mapState("mein_Modul", ["Eigenschaft"]), // Auf Getter zugreifen ...mapGetters("mein_Modul", ["Eigenschaft"]), // Auf Nicht-Root-Eigenschaften zugreifen ...mapState("mein_Modul", { Eigenschaft: Status => Status.Objekt.verschachtelte.Eigenschaft }) }, Methoden: { // Auf Aktionen zugreifen ...mapActions("mein_Modul", ["meineAktion"]), // Zugriff auf Mutationen …mapMutations("mein_Modul", ["meineMutation"]) } }; Alle nötigen Informationen zu diesen praktischen Helfern finden Sie in der offiziellen 5. API Factory verwenden Normalerweise erstelle ich gerne einen API ├── auth.js ├── Benachrichtigungen.js └── teams.js Jeder Knoten gruppiert alle Endpunkte seiner Kategorie. So initialisiere ich dieses Muster in einer // PROJEKT: API Auth von "@/api/auth" importieren; importiere Teams aus "@/api/teams"; Benachrichtigungen von „@/api/notifications“ importieren; exportiere Standard (Kontext, einfügen) => { wenn (Prozess.Client) { const token = localStorage.getItem("token"); // Token setzen, wenn definiert wenn (Token) { Kontext.$axios.setToken(token, "Träger"); } } // API-Repositorys initialisieren const-Repositorys = { auth: Auth(Kontext.$axios), Teams: Teams(Kontext.$axios), Benachrichtigungen: Benachrichtigungen (Kontext.$axios) }; injizieren("API", Repositories); }; exportiere Standard $axios => ({ Passwort vergessen (E-Mail) { return $axios.$post("/auth/password/forgot", { email }); }, login(email, passwort) { return $axios.$post("/auth/login", { E-Mail, Passwort }); }, abmelden() { $axios.$get("/auth/logout"); }, registrieren(Nutzlast) { gibt $axios.$post("/auth/register", Nutzlast) zurück; } }); Jetzt kann ich sie einfach in meinen Komponenten oder Vuex-Aktionen wie folgt aufrufen: Standard exportieren { Methoden: { beim Absenden() { versuchen { dies.$api.auth.login(diese.E-Mail, dieses.Passwort); } Fehler abfangen { konsole.fehler(fehler); } } } }; 6. Verwenden Sie $config, um auf Ihre Umgebungsvariablen zuzugreifen (besonders nützlich in Vorlagen).Ihr Projekt hat wahrscheinlich einige globale Konfigurationsvariablen, die in einer Datei definiert sind: Konfiguration ├── entwicklung.json └── Produktion.json Ich greife gerne schnell über // NPM importiere Vue von „vue“; // PROJEKT: COMMONS importiere Entwicklung aus "@/config/development.json"; importiere Produktion aus "@/config/production.json"; wenn (Prozess.env.NODE_ENV === "Produktion") { Vue.prototype.$config = Objekt.freeze(Produktion); } anders { Vue.prototype.$config = Objekt.freeze(Entwicklung); } 7. Befolgen Sie eine Konvention zum Schreiben von Commit-KommentarenWenn Ihr Projekt wächst, möchten Sie regelmäßig den Commit-Verlauf Ihrer Komponenten durchsuchen. Wenn Ihr Team beim Schreiben seiner Commit-Nachrichten nicht dieselben Konventionen befolgt, ist es schwierig zu verstehen, was die einzelnen Teammitglieder tun. Ich verwende und empfehle immer Das Befolgen dieser Richtlinien führt zu besser lesbaren Nachrichten und erleichtert die Nachverfolgung von Commits beim Überprüfen des Projektverlaufs. Kurz gesagt, so funktioniert es: git commit -am "<Typ>(<Umfang>): <Betreff>" # Hier sind einige Beispiele git commit -am "docs(changelog): Änderungsprotokoll auf Beta.5 aktualisieren" git commit -am "fix(release): muss von den neuesten rxjs und zone.js abhängig sein" Werfen Sie einen Blick auf die 8. Frieren Sie die Version des Pakets immer ein, wenn Sie das Projekt erstellenIch weiß ... alle Pakete sollten den Regeln der semantischen Versionierung folgen. Die Realität sieht jedoch so aus, dass dies bei einigen von ihnen nicht der Fall ist. :schwitzendes Lächeln: Damit Sie nicht mitten in der Nacht aufwachen, weil eine Ihrer Abhängigkeiten Ihr gesamtes Projekt beschädigt hat, können Sie Ihre Morgen mit dem Sperren der Versionen aller Ihrer Pakete weniger stressig gestalten. :unschuldig: Die Bedeutung ist einfach: Vermeiden Sie die Verwendung der Version, die mit ^ beginnt: { "Name": "mein Projekt", "version": "1.0.0", "privat": wahr, "Abhängigkeiten": { "axios": "0,19,0", "imagemin-mozjpeg": "8.0.0", "imagemin-pngquant": "8.0.0", "imagemin-svgo": "7.0.0", "nuxt": "2.8.1", }, "devAbhängigkeiten": { "autoprefixer": "9.6.1", "babel-eslint": "10.0.2", "eslint": "6.1.0", "eslint-friendly-formatter": "4.0.1", "eslint-loader": "2.2.1", "eslint-plugin-vue": "5.2.3" } } 9. Verwenden Sie die virtuelle Bildlaufleiste von Vue, wenn Sie große Datenmengen anzeigen Wenn Sie auf einer bestimmten Seite viele Zeilen anzeigen oder eine große Datenmenge durchlaufen müssen, haben Sie möglicherweise bemerkt, dass die Seite sehr schnell gerendert wird. Um dieses Problem zu beheben, können Sie npm installiere vue-virtual-scroller Es werden nur die sichtbaren Elemente in der Liste gerendert und Komponenten und DOM-Elemente werden wiederverwendet, um es so effizient wie möglich zu machen. Es ist wirklich einfach zu verwenden und gleitet sehr sanft <Vorlage> <RecycleScroller Klasse="Scroller" :items="Liste" :Artikelgröße="32" Schlüsselfeld="id" v-slot="{ Element }" > <div Klasse="Benutzer"> {{ Artikelname }} </div> </RecycleScroller> </Vorlage> 10. Verfolgen Sie die Größe von Drittanbieterpaketen Wenn viele Leute an einem Projekt arbeiten, kann die Anzahl der installierten Pakete schnell eine unglaubliche Menge erreichen, wenn niemand ein Auge darauf hat. Um eine Verlangsamung Ihrer App zu vermeiden (insbesondere bei langsamen Mobilfunknetzen), verwende ich das Paket „import-expense“ in Beispielsweise habe ich in einem aktuellen Projekt die gesamte Lodash-Bibliothek importiert (um ca. 24 KB minimiert). Das Problem besteht darin, dass im Projekt nur eine Methode, npm entfernt lodash npm installiere lodash.clonedeep Anschließend können Sie die Funktion clonedeep bei Bedarf importieren: importiere cloneDeep aus „lodash.clonedeep“; JavaScript
Damit ist dieser Artikel über 10 Best Practices zum Erstellen und Warten großer Vue.js-Projekte abgeschlossen. Weitere praktische Inhalte zum Erstellen und Warten von Vue.js-Projekten finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: So installieren Sie den RabbitMQ-Server mit Yum auf CentOS
>>: Verschachtelte Verwendungsoperation für MySQL-Aggregatfunktionen
Aktuell besteht die Anforderung, dass beim Klicke...
Hintergrund Bei der Data-Warehouse-Modellierung w...
Inhaltsverzeichnis Vorwort 1. Was ist 2. So verwe...
Inhaltsverzeichnis 1. Voranalyse 1. Vorabanalyse ...
Inhaltsverzeichnis 1. Ersetzen Sie die Apply-Meth...
In diesem Artikel wird der spezifische Code der J...
Inhaltsverzeichnis 1. v-on-Richtlinie 1. Grundleg...
In diesem Artikelbeispiel wird der spezifische Co...
Nach einer langen Zeit der Transplantation und In...
Leistung Zum Beispiel: HTML: <div Klasse="...
Vorwort Es wird gesagt, dass sich die für Betrieb...
Die Barrierefreiheit von Webseiten scheint etwas z...
1. Upgrade-Vorgang: sudo apt-get update Probleme ...
Inhaltsverzeichnis Lebenszyklusfunktionen Allgeme...
1. Grundlegende Anwendungsbeispiele für Float 1. ...