Wie man Signaturen liest
Signaturabschnitte sehen typischerweise so aus:
vnode = m(selector, attributes, children)
Argument | Typ | Erforderlich | Beschreibung |
---|---|---|---|
selector | String|Object | Ja | Ein CSS-Selektor oder eine Komponente |
attributes | Object | Nein | HTML-Attribute oder Element-Eigenschaften |
children | Array<Vnode>|String|Number|Boolean | Nein | Kind-VNodes. Kann als Splat-Argumente geschrieben werden |
returns | Vnode | Ein Vnode, der zurückgegeben wird. |
Die Signaturzeile über der Tabelle gibt die allgemeine Syntax der Methode an und zeigt den Namen der Methode, die Reihenfolge ihrer Argumente und einen vorgeschlagenen Variablennamen für den Rückgabewert.
Die Spalte Argument in der Tabelle gibt an, welcher Teil der Signatur in der jeweiligen Tabellenzeile erläutert wird. Die returns
-Zeile enthält Informationen zum Rückgabewert.
Die Spalte Typ gibt den erwarteten Datentyp für das Argument an.
Ein Pipe-Symbol (|
) gibt an, dass ein Argument gültig ist, wenn es einen der aufgeführten Typen hat. Zum Beispiel gibt String|Object
an, dass selector
entweder ein String oder ein Objekt sein kann.
Winkelklammern (< >
) nach einem Array
geben den erwarteten Typ für Array-Elemente an. Zum Beispiel gibt Array<String>
an, dass das Argument ein Array sein muss und dass alle Elemente in diesem Array Strings sein müssen. Winkelklammern nach einem Object
geben eine Map an. Zum Beispiel gibt Object<String,Component>
an, dass das Argument ein Objekt sein muss, dessen Schlüssel Strings und deren Werte Komponenten sind.
Manchmal werden spezielle Typen verwendet, um anzuzeigen, dass eine bestimmte Objektsignatur erforderlich ist. Zum Beispiel ist Vnode
ein Objekt mit einer virtuellen DOM-Node-Struktur.
Die Spalte Erforderlich zeigt an, ob ein Argument erforderlich oder optional ist. Wenn ein Argument optional ist, kann es auf null
oder undefined
gesetzt oder ganz weggelassen werden, sodass das nächste Argument an dessen Stelle erscheint.
Optionale Argumente
Funktionsargumente, die von eckigen Klammern [ ]
umgeben sind, sind optional. Im folgenden Beispiel ist url
ein optionales Argument:
m.request([url,] options)
Splats
Ein Splat-Argument bedeutet, dass Sie, wenn das Argument ein Array ist, die eckigen Klammern weglassen und stattdessen eine variable Anzahl an Argumenten an die Methode übergeben können.
Im Beispiel oben bedeutet dies, dass m("div", {id: "foo"}, ["a", "b", "c"])
auch als m("div", {id: "foo"}, "a", "b", "c")
geschrieben werden kann.
Splats sind in einigen Compile-to-JS-Sprachen wie CoffeeScript nützlich und ermöglichen auch hilfreiche Kurzformen für einige häufige Anwendungsfälle.
Funktionssignaturen
Funktionen werden mit einem Pfeil (->
) gekennzeichnet. Die linke Seite des Pfeils gibt die Typen der Eingabeargumente an und die rechte Seite gibt den Typ des Rückgabewerts an.
Zum Beispiel hat parseFloat
die Signatur String -> Number
, d. h. sie erwartet einen String als Eingabe und gibt eine Zahl als Ausgabe zurück.
Funktionen mit mehreren Argumenten werden mit Klammern gekennzeichnet: (String, Array) -> Number
Komponentensignaturen
Komponenten werden durch Aufrufe von m
definiert, wobei das erste Argument (der Selektor) auf eine im Text definierte Konstante gesetzt wird:
vnode = m(m.route.Link, attributes, children)
Argument | Typ | Erforderlich | Beschreibung |
---|---|---|---|
attributes.href | Object | Ja | Die Zielroute für die Navigation. |
attributes.selector | String|Object|Function | Nein | Hiermit wird der Name des zu verwendenden HTML-Elements festgelegt. Falls angegeben, muss es sich um einen gültigen Selektor für m handeln. Der Standardwert ist "a" . |
attributes.options | Object | Nein | Dies setzt die Optionen, die an m.route.set übergeben werden. |
attributes | Object | Nein | Weitere Attribute für den zurückgegebenen VNode können übergeben werden. |
children | Array<Vnode>|String|Number|Boolean | Nein | VNodes für Kindelemente. |
returns | Vnode | Ein Vnode. |
Sofern nicht anders angegeben, können Kindelemente hier als Splat-Argumente übergeben werden.
Ein Element ohne untergeordnete Elemente und/oder Attribute kann den relevanten Parameter ganz weglassen:
vnode = m(Component, attributes)
Argument | Typ | Erforderlich | Beschreibung |
---|---|---|---|
attributes.href | Object | Ja | Das Ziel |
attributes | Object | Nein | Weitere Attribute für den zurückgegebenen Vnode |
returns | Vnode | Ein Vnode |