smalljs$molSuche⌘ KDokuPlaygroundVergleichÖkosystemÜberDE
DatenabrufGetting StartedEinführungMentales ModellErste SchritteVon TypeScript zu view.treeProjektstrukturWerkzeugeEssentialsInstallationViewsZustand und ReaktivitätRoutingRenderingTestenDeploymentFehlerbehebungDataDatenabrufDatenschemasGiper BazaMoreSchaufensterVon React, Vue und SvelteKochbuchAdvancedPluginsModul-MetadatenOfflineGhost-AnsichtenAboutFAQTeamReleasesAPI$mol_button_major$mol_button_minor$mol_string$mol_number$mol_text$mol_paragraph$mol_list$mol_row$mol_link$mol_check$mol_switch$mol_select$mol_scroll$mol_page$mol_pick

Datenabruf

Entfernte Daten in $mol zu laden ist keine spezielle API — ein asynchroner Wert ist einfach eine reaktive Eigenschaft, die so geschrieben ist, als wäre die Antwort schon da. Die Ansicht wartet darauf, zeigt einen Ladezustand und rendert neu, wenn die Daten eintreffen.

Eine asynchrone Eigenschaft

Rufen Sie das Netz innerhalb eines @ $mol_mem auf und geben Sie das geparste Ergebnis zurück. Im Code steht kein Promise, kein await und kein Callback:1namespace $.$$ {2 export class $my_users extends $.$my_users {3 @ $mol_mem4 users() {5 return this.$.$mol_fetch.json( 'https://api.example.com/users' ) as {6 id: number7 name: string8 }[]9 }10 }11}$mol_fetch suspendiert die Fiber, bis die Antwort eintrifft, dann startet die Berechnung neu und users() gibt das Array zurück. Während sie aussteht, zeigt jede Ansicht, die users() liest, automatisch den eingebauten Ladezustand — Sie schreiben kein isLoading-Flag. Geben Sie nicht selbst ein Promise aus einem @ $mol_mem zurück: Ein als Wert abgelegtes Promise hält die Zelle für immer im Ladezustand, siehe Fehlerbehebung.this.$ ist der Kontext der Komponente. Jeder Dienst kommt durch ihn: $mol_fetch für das Netz, $mol_state_arg für die URL, $mol_after_timeout für die Zeit. In einem Test wird der Kontext ersetzt, sodass dasselbe users() seine Anfrage an einen Mock statt ins Netz schickt, ohne dass sich eine Zeile der Komponente ändert. Testen zeigt diesen Mock.

Das Ergebnis rendern

Binden Sie die aufgelösten Daten direkt in eine Liste:1 @ $mol_mem2 user_names() {3 return this.users().map( user => user.name )4 }Wenn die Antwort eintrifft, aktualisiert sich users(), user_names() wird neu berechnet und die Liste rendert. Keine Callbacks, kein useEffect.

Neu laden

Weil es nur eine reaktive Zelle ist, laden Sie neu, indem Sie sie invalidieren. Hängen Sie von einem Token ab, das Sie hochzählen können:1 @ $mol_mem2 reload_token( next?: number ) {3 return next ?? 04 }5 6 @ $mol_mem7 users() {8 this.reload_token() // subscribe9 return this.$.$mol_fetch.json( 'https://api.example.com/users' ) as unknown[]10 }11 12 @ $mol_action13 reload() {14 this.reload_token( this.reload_token() + 1 )15 }
Diese Seite auf GitHub bearbeitenWar das hilfreich?JaNeinZurückFehlerbehebungWeiterDatenschemas
Auf dieser SeiteEine asynchrone EigenschaftDas Ergebnis rendernNeu ladenFehlerWeiter
Type to search the documentation.