VorwortJedes SaaS-Unternehmen muss über eine eigene Low-Code-Plattform verfügen. Im Prozess der visuellen Low-Code-Frontend-Entwicklung werden viele interessante technische Anforderungen gefunden. Das Lösen dieser Anforderungen bringt einem oft große Vorteile. Lassen Sie uns heute die technischen Frontend-Probleme teilen, die im Prozess der Entwicklung von Dooring - JavaScript-Funktionsspeicher - aufgetreten sind. HintergrundWir alle wissen, dass wir zum Erstellen einer Front-End-Seite die folgenden drei Elemente benötigen:
Im Zeitalter datengesteuerter Ansichten ist die Beziehung zwischen diesen drei Elementen häufig wie folgt: Die Designideen der visuellen Konstruktionsplattform basieren häufig auf dem oben genannten Prozess. Wir müssen eine Editorumgebung bereitstellen, in der Benutzer Ansichten erstellen und interagieren können. Das vom Benutzer gespeicherte Endprodukt kann wie folgt aussehen: { "Name": "Dooring-Formular", "bgColor": "#666", "share_url": "http://xxx.cn", "Mount_Ereignis": [ { "id": "123", "Funktion": () => { // Initialisierungslogik GamepadHapticActuator(); }, "Quelldaten": [] } ], "Körper": [ { "Name": "Überschrift", "Ereignis": [ { "id": "123", "Typ": "Klick", "Funktion": () => { // Benutzerdefinierte Interaktionslogik der Komponente showModal(); } } ] } ] } Die Frage ist also, ob wir JSON-Strings speichern können (durch JSON.stringify-Serialisierung), aber wie speichern wir die Funktion zusammen? Wie können wir nach dem Speichern der Funktion dafür sorgen, dass JS diese Funktion normal ausführt, wenn die Seite gerendert wird? UmsetzungsplandenkenWir alle wissen, dass die Konvertierung von JS-Objekten in JSON mit JSON.stringify möglich ist, es gibt jedoch auch Einschränkungen, wie zum Beispiel:
Wir können in Punkt 4 sehen, dass eine Funktion, die das von uns serialisierte Objekt enthält, ignoriert wird! Es ist also verständlich, dass wir die Funktion nicht mit JSON.stringify speichern können. Gibt es also eine andere Möglichkeit? Sie können die Funktion zunächst in einen String umwandeln, ihn dann mit JSON.stringify serialisieren und im Backend speichern und den String schließlich mit eval oder Function in eine Funktion umwandeln, wenn die Komponente verwendet wird. Der allgemeine Prozess ist wie folgt: Ja, das Ideal ist schön, aber die Realität ist _______. Als nächstes analysieren wir, wie die Schlüssellinks func2string und string2func implementiert werden. js Speicherfunktion LösungsdesignFreunde, die mit der JSON-API vertraut sind, wissen möglicherweise, dass JSON.stringify 3 Parameter unterstützt und der zweite Parameterersetzer eine Funktion oder ein Array sein kann. Als Funktion hat es zwei Parameter, Schlüssel und Wert, die beide serialisiert sind. Die Funktion muss den Wert in einer JSON-Zeichenfolge zurückgeben, wie unten gezeigt:
So können wir die Daten, deren Werttyp eine Funktion ist, in den zweiten Funktionsparameter konvertieren. wie folgt: const stringify = (obj) => { returniere JSON.stringify(obj, (k, v) => { wenn(Typ von v === 'Funktion') { gebe `${v}` zurück } zurückgeben v }) } Auf diese Weise scheinen wir die Funktion im Backend speichern zu können. Als Nächstes sehen wir uns an, wie das JSON mit der Funktionszeichenfolge deserialisiert wird. Da wir die Funktion in einen String konvertiert haben, müssen wir wissen, welche Strings beim Deparsen in Funktionen konvertiert werden müssen. Wenn wir mit der Funktion nichts machen, müssen wir sie möglicherweise manuell identifizieren.
Daher habe ich eine einfachere Methode gewählt, um die Funktion zu extrahieren, ohne komplexe reguläre Ausdrücke schreiben zu müssen. Die Methode besteht darin, bei der Serialisierung der Funktion Bezeichner einzufügen, damit wir wissen, welche Zeichenfolgen als Funktionen analysiert werden müssen. Dies geht wie folgt: stringify: Funktion(Objekt: beliebig, Leerzeichen: Zahl | Zeichenfolge, Fehler: (Fehler: Fehler | unbekannt) => {}) { versuchen { returniere JSON.stringify(obj, (k, v) => { wenn(Typ von v === 'Funktion') { gibt `${this.FUNC_PREFIX}${v}` zurück } zurückgeben v }, Raum) } Fang(Fehler) { Fehler && Fehler(err) } } this.FUNC_PREFIX ist der von uns definierte Bezeichner, damit wir die Funktion bei Verwendung von JSON.parse schnell analysieren können. JSON.parse unterstützt auch einen zweiten Parameter, der dem zweiten Parameter von JSON.stringify ähnelt. Wir können ihn wie folgt konvertieren: parse: function(jsonStr: string, error: (err: Error | unknown) => {}) { versuchen { return JSON.parse(jsonStr, (Schlüssel, Wert) => { wenn(Wert && Typ des Wertes === 'Zeichenfolge') { Rückgabewert.indexOf(this.FUNC_PREFIX) > -1 ? neue Funktion(`return ${value.replace(this.FUNC_PREFIX, '')}`)() : Wert } Rückgabewert }) } Fang(Fehler) { Fehler && Fehler(err) } } New Function kann einen String in eine JS-Funktion umwandeln. Es akzeptiert nur String-Parameter. Seine optionalen Parameter sind die Eingabeparameter der Methode und die erforderlichen Parameter sind der Inhalt des Methodenkörpers. Ein anschauliches Beispiel: Der Inhalt des Funktionskörpers im obigen Code ist: neue Funktion(`return ${value.replace(this.FUNC_PREFIX, '')}`)() Der Grund für die Rückgabe besteht darin, die ursprüngliche Funktion intakt wiederherzustellen. Sie können auch eval verwenden, aber aus Gründen der öffentlichen Meinung ist es besser, es mit Vorsicht zu verwenden. Die obige Lösung kann bereits die Funktion der Front-End-Speicherfunktion realisieren, aber um technischer und robuster zu sein, sind viele zusätzliche Verarbeitungs- und Optimierungsschritte erforderlich, damit mehr Leute Ihre Bibliothek sofort verwenden können. endlichDamit mehr Leute diese Funktion direkt nutzen können, habe ich die komplette JSON-Serialisierungslösung in einer Klassenbibliothek gekapselt. Die unterstützenden Funktionen sind wie folgt:
Die Installationsmethode ist wie folgt: # oder npm install xijs Garn hinzufügen xijs verwenden: importiere { Parser } von 'xijs'; Konstante a = { x: 12, b: Funktion() { Alarm(1) } } const json = parser.stringify(a); const obj = parser.parse(json); //Methode obj.b() aufrufen; ZusammenfassenDies ist das Ende dieses Artikels über die Verwendung von JavaScript zum Speichern von Funktionen. Weitere relevante Inhalte zur Verwendung von JavaScript zum Speichern von Funktionen finden Sie in früheren Artikeln auf 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:
|
>>: Das Textarea-Tag kann nicht in der Größe geändert und nicht mit der Maus gezogen werden
Problembeschreibung Folgende Ergebnisse möchte ic...
Beispiel für die Validierung eines jQuery-Formula...
Inhaltsverzeichnis Benutzerverwaltung Neuen Benut...
Vorwort Ich habe zuvor eine Komponente im Ladesti...
Warum brauchen wir virtuellen Dom? Virtual DOM wu...
Schritte zur Sicherung des SVN-Dienstes 1. Quells...
Allgemeine Verwendung von Regexp in Mysql Fuzzy-M...
In diesem Experiment konfigurieren wir die standa...
Inhaltsverzeichnis 1. Anonyme Slots 2. Benannte S...
Die Diversifizierung von Website-Layouts ist unse...
In diesem Artikel wird der spezifische Code von R...
1) Geltungsbereich: schreibgeschützt: Eingabe [Typ...
Wenn wir möchten, dass mehr Leute die von uns ers...
Ausführungsproblem zwischen MySQL Max und Where S...
Einführung Das mysql-utilities-Toolset ist eine S...