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

Ментальная модель

Если вы пришли из React или Vue, первые дни в $mol уходят на поиски того, чего тут нет: computed, watch, useEffect, onMounted, fetch в хуке жизненного цикла. Они не спрятаны где-то в API — для них просто нет места в модели. Эта страница — пятиминутная версия этой модели. Прочтите её перед Вью и возвращайтесь, когда очередное знакомое имя не найдётся.

Тянем, а не толкаем

Ничего не вычисляется, пока это кто-нибудь не прочитает. Вью рендерится, читая свои свойства; каждое свойство читает то, что нужно ему; цепочка зависимостей собирается из этих чтений сама. Нет подписки, которую надо объявить, и нет watch, который надо зарегистрировать: чтение и есть подписка.1$my_profile $mol_view2 sub /3 <= Name $mol_view4 sub / <= name \1namespace $.$$ {2 export class $my_profile extends $.$my_profile {3 @ $mol_mem4 user() {5 return this.$.$mol_fetch.json( 'https://api.example.com/me' ) as { name: string }6 }7 name() {8 return this.user().name9 }10 }11}Рендеринг Name читает name(), name() читает user(), user() идёт в сеть. Никто не рассказывал вью про запрос и никто не рассказывал запросу про вью. Когда user() меняется, пересчитывается всё, что его читало, и больше ничего.

Никакого жизненного цикла

Нет ни mounted, ни useEffect, ни created. Данные запрашиваются чтением свойства, а свои свойства вью читает, когда рендерится. Поэтому пример выше загружает пользователя в тот момент, когда $my_profile появляется на экране, и не раньше. Когда вью уходит с экрана, user() больше никто не читает, и ячейка освобождается вместе с вью.Это и есть вся замена паттерну «загрузить на маунте»: вью просит то, что ему нужно, а фреймворк решает, когда спрашивать. Загрузка привязана не к событию страницы, а к тому, что её видно.

Свойство — это ячейка

Один метод с необязательным аргументом — сразу и геттер, и сеттер, и вычисляемое значение, и состояние:1@ $mol_mem2count( next?: number ) {3 return next ?? 04}Вызов без аргумента читает, с аргументом — пишет. @ $mol_mem превращает метод в кешируемую ячейку, которая пересчитывается, когда изменилось что-то из прочитанного ею. Вычисляемое значение — это просто метод с @ $mol_mem, читающий другие методы. Наблюдатель не нужен: побочный эффект принадлежит событию, а обработчик события — это метод, помеченный @ $mol_action.1@ $mol_mem2doubled() {3 return this.count() * 24}5 6@ $mol_action7increment() {8 this.count( this.count() + 1 )9}
Редактировать эту страницу на GitHubБыло полезно?ДаНетНазадВведениеВперёдБыстрый старт
На этой страницеТянем, а не толкаемНикакого жизненного циклаСвойство — это ячейкаСинхронный код, который умеет ждатьВсё — переопределениеКак читать исходникиИменаДальше
Type to search the documentation.