useTask$() - Явная реактивность
В дополнение к неявной реактивности, создаваемой шаблонами, Qwik поддерживает явное выполнение кода при изменении свойства. Это достигается с помощью хука useTask$()
. Хуки useTask$()
выполняются перед рендером компонента и могут быть асинхронными. Хук также может иметь функцию очистки, которая вызывается при следующем выполнении хука или при удалении компонента.
В этом примере нажатие на +1
сразу же обновляет count
. Мы хотели бы обновлять значение delay count
после 2-секундной задержки. Если count
обновляется до истечения 2 секунд, то таймер перезапускается.
Обратите внимание, что обратный вызов useTask$()
получает функцию track
. Используйте функцию track
, чтобы сообщить Qwik, какие свойства должны вызвать срабатывание наблюдателя задачи. Функция track
создает подписки в состоянии. При каждом вызове useTask$()
подписки очищаются, поэтому важно всегда устанавливать новый набор подписок. Это полезно, если набор подписок меняется во время жизни функции.
Функция обратного вызова useTask$()
может возвращать функцию очистки. Функция очистки вызывается при следующем выполнении useTask$()
или при удалении компонента. В нашем случае функция cleanup
используется для возврата кода, который очищает setTimeout
.
Обратные вызовы useTask$()
выполняются до того, как компонент будет отрендерен. Это позволяет использовать их для вычисления значений, используемых при рендере. Функция работает как на сервере, так и на клиенте. Выполнение на сервере устанавливает подписки, которые затем сериализуются и доступны на клиенте. Это избавляет клиента от необходимости загружать все компоненты и выполнять их по крайней мере один раз, чтобы восстановить информацию о подписке для системы.