smalljs$molПоиск⌘ KДокументацияПесочницаСравнениеЭкосистемаО проектеRU
Загрузка данныхGetting StartedВведениеМентальная модельБыстрый стартОт TypeScript к view.treeСтруктура проектаИнструментарийEssentialsУстановкаВьюСостояние и реактивностьРоутингРендерингТестированиеДеплойРешение проблемDataЗагрузка данныхСхемы данныхГипер БазаMoreВитринаИз React, Vue и SvelteСборник рецептовAdvancedПлагиныМетаданные модуляОфлайнGhost-вьюAboutЧастые вопросыКомандаРелизыAPI$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

Загрузка данных

Загрузка удалённых данных в $mol — не особый API: асинхронное значение это просто реактивное свойство, написанное так, будто ответ уже есть. Вью его дожидается, показывает состояние загрузки и перерисовывается, когда данные приходят.

Асинхронное свойство

Позовите сеть внутри @ $mol_mem и верните разобранный результат. Ни промиса, ни await, ни колбэка в коде нет: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 приостанавливает фибру, пока не придёт ответ, после чего вычисление перезапускается и users() возвращает массив. Пока запрос в ожидании, любое вью, читающее users(), автоматически показывает встроенное состояние загрузки — вы не пишете флаг isLoading. Сами промис из @ $mol_mem не возвращайте: положенный в значение промис оставляет ячейку в состоянии загрузки навсегда, см. Решение проблем.this.$ — это контекст компонента. Каждый сервис приходит через него: $mol_fetch для сети, $mol_state_arg для URL, $mol_after_timeout для времени. В тесте контекст подменяется, поэтому тот же users() отправляет свой запрос в мок вместо сети, и в компоненте не меняется ни строчки. Этот мок показывает Тестирование.

Рендеринг результата

Свяжите разрешённые данные прямо в список:1 @ $mol_mem2 user_names() {3 return this.users().map( user => user.name )4 }Когда приходит ответ, users() обновляется, user_names() пересчитывается, и список рендерится. Ни колбэков, ни useEffect.

Перезагрузка

Поскольку это просто реактивная ячейка, вы перезапрашиваете данные, инвалидируя её. Завязывайтесь на токен, который можно инкрементить:1 @ $mol_mem2 reload_token( next?: number ) {3 return next ?? 04 }5 6 @ $mol_mem7 users() {8 this.reload_token() // подписка9 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 }
Редактировать эту страницу на GitHubБыло полезно?ДаНетНазадРешение проблемВперёдСхемы данных
На этой страницеАсинхронное свойствоРендеринг результатаПерезагрузкаОшибкиДальше
Type to search the documentation.