Die Entwicklung von Javascript wird manchmal wie ein Detektiv. Wie verstehe ich den Code eines anderen? Es ist gut, wenn der Entwickler die subtile Fähigkeit besitzt, Variablen zu benennen, damit andere den Punkt verstehen. Aber was ist, wenn die Teammitglieder die Absicht ihres Kollegen immer noch nicht immer verstehen können? Wie kann man verstehen, was in das Argument einer Funktion einfließt?
Angenommen, das Funktionsargument heißt Fehler. Wahrscheinlich ist in den Fehlern ein Array. Höchstwahrscheinlich Linien? Nun, dieses Array ist verständlich. Immerhin wird seine Länge weiter überprüft. Die Eigenschaft length hat jedoch auch eine Zeichenfolge. Es scheint, dass Sie einen Haltepunkt setzen und das Skript ausführen müssen, um es genau herauszufinden. Gehen Sie dann das Skript auf der Benutzeroberfläche vollständig durch (zum Beispiel benötigen wir den letzten Schritt des Formulars). In devtools ist nun ersichtlich, dass Fehler ein Objekt mit einer Reihe spezifischer Felder sind, einschließlich des Längenfelds.
Eine solche Mehrdeutigkeit beim Parsen von Javascript-Code führt zu einer Verschwendung von Entwicklerzeit. Eine gute Lösung in diesem Fall könnte das Typoskript sein (im Folgenden ts). Sie können es im nächsten Projekt verwenden oder, noch besser, die Unterstützung im vorhandenen Projekt vornehmen. Danach wird die Zeit zum Verstehen des Codes einer anderen Person erheblich verkürzt. Um die Struktur von Daten zu verstehen, reicht ein Klick aus. Sie können sich auf die Logik des Arbeitens mit Daten konzentrieren und jederzeit wissen, dass Sie den Code klar verstehen.
Einige Vorteile von ts sollten beachtet werden. Es ist in verschiedenen Frameworks weit verbreitet und eng mit Javascript verwandt. Die Entwicklung von ts wird von den Bedürfnissen der Frontend-Entwickler bestimmt.
Dieser Artikel beschreibt die Entwicklung von Aufgabenanwendungen, aber nur eine kurze Beschreibung interessanter Punkte. Den vollständigen Code finden Sie hier .
Ich habe React, Typoskript und Mobx verwendet. Mobx ist ein flexibles Tool zum Verwalten des Anwendungsstatus. Mobx ist prägnant. Sie können damit synchron mit dem Status der Reaktionskomponenten arbeiten. Kein Problem wie:
this.setState({name: 'another string'}); alert(this.state.name);
In diesem Fall wird der alte state.name angezeigt.
Darüber hinaus ist mobx praktisch und beeinträchtigt die Arbeit mit ts-Typen nicht. Sie können den Status als separate Klassen oder direkt in der Reaktionskomponente beschreiben.
Der Einfachheit halber werden alle Komponenten im Komponentenordner abgelegt. Im Ordner der Komponente wird eine Klasse mit einer Beschreibung des Status definiert, der logisch mit der Anzeige und dem Betrieb der Komponente verknüpft ist.
Der TodoItem-Ordner enthält eine Datei mit der Reaktionskomponente TodoItem.tsx, eine Datei mit den Stilen TodoItem.module.scss und eine Statusdatei TodoItemState.ts.
TodoItemState.ts beschreibt die Felder zum Speichern von Daten, den Zugriff darauf und die Regeln zum Ändern. Das Spektrum der Möglichkeiten ist dank OOP und ts sehr groß. Ein Teil der Daten kann privat sein, ein Teil ist schreibgeschützt und so weiter. Mit dem @ o-Dekorator werden beobachtbare Felder angegeben. Reaktionskomponenten reagieren auf ihre Veränderungen. Die Dekoratoren @a ( Aktion ) werden in Methoden zum Ändern des Status verwendet.
In TodoItem.tsx werden nur zwei Eigenschaften an Requisiten übergeben. In mobx ist es für die Gesamtleistung einer Anwendung optimal, komplexe Datenstrukturen auf die Requisitenreaktionskomponente zu übertragen. Da wir ts verwenden, können wir den von der Komponente akzeptierten Objekttyp genau angeben.
Die ITodoItemProps-Schnittstelle beschreibt die todo-Eigenschaft vom Typ TodoItemState. Somit erhalten wir innerhalb der Reaktionskomponente Daten zur Anzeige und Methoden zu deren Änderung. Darüber hinaus können Einschränkungen beim Ändern von Daten je nach Aufgabenstellung sowohl in der Zustandsklasse als auch in den Methoden der Reaktionskomponente beschrieben werden.
Die TodoList-Komponente ähnelt TodoItem. In TodoListState.ts können Sie Getter mit dem Dekorator @c (@computed) sehen. Dies sind gewöhnliche Klassen-Getter, nur ihre Werte werden gespeichert und wiedergegeben, wenn sich ihre Abhängigkeiten ändern. Das vom Design berechnete Modell ähnelt Redux-Selektoren. Praktischerweise ist es nicht erforderlich, wie bei React.memo oder reselect, eine Liste von Abhängigkeiten explizit zu übergeben. Reaktionskomponenten reagieren sowohl auf berechnete Änderungen als auch auf beobachtbare Änderungen. Ein interessantes Merkmal ist, dass die Neuberechnung des Werts nicht erfolgt, wenn die Berechnung derzeit nicht am Rendering beteiligt ist (was Ressourcen spart). Daher kann die Berechnung trotz konstanter Abhängigkeitswerte neu berechnet werden (es gibt eine Möglichkeit, mobx explizit anzuweisen, den berechneten Wert zu speichern).
Die Zugriffsliste ist nur über ein berechnetes Feld geöffnet, in dem je nach Anzeigemodus der erforderliche gefilterte Datensatz zurückgegeben wird (abgeschlossen, aktiv oder alle Aufgaben). Die Aufgabenabhängigkeiten geben die berechneten Felder completeTodos, activeTodos und private beobachtbare _todos an.
Betrachten Sie die Hauptkomponente der App. Es wird ein Formular zum Hinzufügen neuer Aufgaben und einer Aufgabenliste gerendert. Eine Instanz des AppSate-Hauptstatus wird sofort erstellt.
Das Feld appState enthält eine Instanz der TodoListState-Klasse zum Anzeigen der TodoList-Komponente und der Methode zum Hinzufügen neuer Aufgaben, die an die AddTodo-Komponente übergeben wird.
Die AddTodo-Komponente hat einen isolierten Zustand. Es gibt keinen Zugang vom allgemeinen Staat. Die einzige Verbindung zu appState besteht beim Senden eines Formulars über die Methode appState.addTodo.
Für den Status der AddTodo-Komponente wird die formstate-Bibliothek verwendet, die mit ts und mobx sehr gut befreundet ist. Mit Formstate können Sie bequem mit Formularen arbeiten, Formulare validieren und vieles mehr. Das Formular hat nur einen erforderlichen Feldnamen.
Im Allgemeinen ist es nicht sinnvoll, das Verhalten aller Komponenten vollständig zu beschreiben. Den vollständigen Code finden Sie hier .
Dieser Artikel beschreibt den Versuch des Autors, einfachen, flexiblen und strukturierten Code zu schreiben, der leicht zu pflegen ist. React unterteilt die Benutzeroberfläche in Komponenten. Die Komponenten beschreiben Zustandsklassen (jede Klasse kann separat getestet werden). Instanzen von Zuständen werden je nach Aufgabe entweder in der Komponente selbst oder auf einer höheren Ebene erstellt. Praktischerweise können Sie dank Typoskript Klassenfeldtypen und Komponenteneigenschaftstypen angeben. Dank mobx können wir, für den Entwickler fast unmerklich, Reaktionskomponenten auf Datenänderungen reagieren lassen.