smalljs$molSzukaj⌘ KDokumentacjaPlaygroundPorównanieEkosystemO projekciePL
Pobieranie danychGetting StartedWprowadzenieModel mentalnyPierwsze krokiZ TypeScriptu do view.treeStruktura projektuNarzędziaEssentialsInstalacjaWidokiStan i reaktywnośćRoutingRenderowanieTestowanieWdrożenieRozwiązywanie problemówDataPobieranie danychSchematy danychGiper BazaMorePrezentacjaZ React, Vue i SvelteZbiór przepisówAdvancedWtyczkiMetadane modułuOfflineWidoki-duchyAboutFAQZespółWydaniaAPI$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

Pobieranie danych

Ładowanie zdalnych danych w $mol nie jest specjalnym API — wartość asynchroniczna to po prostu właściwość reaktywna napisana tak, jakby odpowiedź już tam była. Widok na nią czeka, pokazuje stan ładowania i renderuje się ponownie, gdy dane nadejdą.

Właściwość asynchroniczna

Wywołaj sieć wewnątrz @ $mol_mem i zwróć sparsowany wynik. W kodzie nie ma obietnicy, nie ma await ani callbacka: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 zawiesza włókno do nadejścia odpowiedzi, po czym obliczenie startuje od nowa, a users() zwraca tablicę. Gdy jest w toku, każdy widok czytający users() automatycznie pokazuje wbudowany stan ładowania — nie piszesz żadnej flagi isLoading. Nie zwracaj obietnicy z @ $mol_mem samodzielnie: obietnica przechowana jako wartość zostawia komórkę w stanie ładowania na zawsze, patrz Rozwiązywanie problemów.this.$ to kontekst komponentu. Każdy serwis idzie przez niego: $mol_fetch do sieci, $mol_state_arg do URL, $mol_after_timeout do czasu. W teście kontekst jest podmieniany, więc to samo users() wysyła swoje żądanie do mocka zamiast do sieci, i to bez zmiany choćby jednej linii komponentu. Testowanie pokazuje takiego mocka.

Renderowanie wyniku

Powiąż rozwiązane dane bezpośrednio z listą:1 @ $mol_mem2 user_names() {3 return this.users().map( user => user.name )4 }Gdy nadejdzie odpowiedź, users() się aktualizuje, user_names() się przelicza, a lista renderuje. Bez callbacków, bez useEffect.

Ponowne ładowanie

Ponieważ to tylko reaktywna komórka, przeładowujesz, unieważniając ją. Zależ od tokenu, który możesz zwiększać: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 }
Edytuj tę stronę na GitHubieCzy to było pomocne?TakNiePoprzedniaRozwiązywanie problemówNastępnaSchematy danych
Na tej stronieWłaściwość asynchronicznaRenderowanie wynikuPonowne ładowanieBłędyDalej
Type to search the documentation.