useVisibleTask$()

コンポーネントが再開された後にコードを実行するには、useVisibleTask$() を使用します。これは、アプリケーションが再開されたときにクライアント上でタイマーやストリームを設定する場合に役立ちます。

track()useVisibleTask$()

useVisibleTask$()useTask$() と同様に track() 関数を受け取ります。ストアが更新されたときに効果をトリガーするには、track() 関数を使用します。詳細については、リアクティビティを参照してください。

コンポーネントのライフサイクルとSSR

Qwik は再開可能です。再開可能とは、アプリケーションがサーバーで開始され、その後クライアントに転送されることを意味します。クライアントでは、アプリケーションは中断した場所から実行を続けます。一般的なユースケースは、サーバーでコンポーネントを作成し、一時停止してからクライアントで再開することです。コンポーネントを完全に機能させるには、タイマーやストリームを設定するために、クライアントでコードを先に実行する必要がある場合があります。

useVisibleTask$() はクライアント専用の方法です。(サーバーには同等のものはありません。)

注記 クライアントとサーバーの両方で実行する必要がある動作については、useTask$()を参照してください。

useVisibleTask$() はいつ実行されますか?

クライアント効果コードは、コンポーネントが再開された後に実行されます。useVisibleTask$() メソッドは、効果が実行されるタイミングを制御する追加の引数({strategy:'intersection-observer|document-ready|document-idle'})を取ります。3つのオプションがあります。

  • intersection-observer(デフォルト):タスクは、ビューポート内で要素が表示されたときに最初に実行されます。内部的には、IntersectionObserver API を使用しています。
  • document-ready:タスクは、ドキュメントの準備が整ったときに最初に実行されます。内部的には、document load イベントを使用しています。
  • document-idle:タスクは、ドキュメントがアイドル状態になったときに最初に実行されます。内部的には、requestIdleCallback API を使用しています。

この例では、画面の下部にレンダリングされる時計コンポーネントを示しています。クライアントで動作させるには、useVisibleTask$() を使用して、時計が毎秒現在時刻を更新するようにします。実装を支援するために、ユーティリティ関数 updateClock を用意しました。

useVisibleTask$() は、setInterval タイマーを解放するクリーンアップ関数を返す必要があることに注意してください。これにより、コンポーネントがアンマウント/破棄されたときにタイマーを適切にクリーンアップできます。

チュートリアルの編集