@@ -108,6 +108,105 @@ const AsyncComp = defineAsyncComponent({
108108
109109エラーコンポーネントが与えられた場合、ローダー関数から返された Promise が reject されたときに表示されます。リクエストが長すぎる場合にエラーコンポーネントを表示するために、timeout を指定することもできます。
110110
111+ ## 遅延ハイドレーション <sup class =" vt-badge " data-text =" 3.5+ " /> {#lazy-hydration}
112+
113+ > このセクションは[ サーバーサイドレンダリング] ( /guide/scaling-up/ssr ) を使用している場合のみ適用されます。
114+
115+ Vue 3.5 以降では、非同期コンポーネントはハイドレーション戦略を提供することでいつハイドレートされるかを制御できます。
116+
117+ - Vue は複数のビルトインのハイドレーション戦略を提供しています。これらのビルトイン戦略は使用されていない場合にツリーシェイキングするために個別にインポートする必要があります。
118+
119+ - 柔軟性を持たせるために設計は意図的に低レベルになっています。将来的にコアまたは高レベルのソリューション(例: Nuxt)で、コンパイラーのシンタックスシュガー(糖衣構文)がこれに基づいて構築される可能性があります。
120+
121+ ### アイドル状態でハイドレート
122+
123+ ` requestIdleCallback ` を使用してハイドレートします:
124+
125+ ``` js
126+ import { defineAsyncComponent , hydrateOnIdle } from ' vue'
127+
128+ const AsyncComp = defineAsyncComponent ({
129+ loader : () => import (' ./Comp.vue' ),
130+ hydrate: hydrateOnIdle (/* タイムアウトの上限を渡すこともできます(省略可能) */ )
131+ })
132+ ```
133+
134+ ### 表示時にハイドレート
135+
136+ ` IntersectionObserver ` を使用して要素が表示されたときにハイドレートします。
137+
138+ ``` js
139+ import { defineAsyncComponent , hydrateOnVisible } from ' vue'
140+
141+ const AsyncComp = defineAsyncComponent ({
142+ loader : () => import (' ./Comp.vue' ),
143+ hydrate: hydrateOnVisible ()
144+ })
145+ ```
146+
147+ オブザーバーに対してオブジェクト値を渡すことができます(省略可能):
148+
149+ ``` js
150+ hydrateOnVisible ({ rootMargin: ' 100px' })
151+ ```
152+
153+ ### メディアクエリーでハイドレート
154+
155+ 指定されたメディアクエリーに一致したときにハイドレートします。
156+
157+ ``` js
158+ import { defineAsyncComponent , hydrateOnMediaQuery } from ' vue'
159+
160+ const AsyncComp = defineAsyncComponent ({
161+ loader : () => import (' ./Comp.vue' ),
162+ hydrate: hydrateOnMediaQuery (' (max-width:500px)' )
163+ })
164+ ```
165+
166+ ### インタラクションでハイドレート
167+
168+ コンポーネント要素に指定されたイベントがトリガーされたときにハイドレートします。ハイドレーションが完了すると、ハイドレーションをトリガーしたイベントも再生されます。
169+
170+ ``` js
171+ import { defineAsyncComponent , hydrateOnInteraction } from ' vue'
172+
173+ const AsyncComp = defineAsyncComponent ({
174+ loader : () => import (' ./Comp.vue' ),
175+ hydrate: hydrateOnInteraction (' click' )
176+ })
177+ ```
178+
179+ 複数のイベントタイプをリストにすることもできます:
180+
181+ ``` js
182+ hydrateOnInteraction ([' wheel' , ' mouseover' ])
183+ ```
184+
185+ ### カスタム戦略
186+
187+ ``` ts
188+ import { defineAsyncComponent , type HydrationStrategy } from ' vue'
189+
190+ const myStrategy: HydrationStrategy = (hydrate , forEachElement ) => {
191+ // forEachElement はコンポーネントのハイドレートされていない DOM の中にある
192+ // 全てのルート要素を反復処理するためのヘルパーです。ルート要素は単一の要素ではなく
193+ // フラグメントである可能性があるためです
194+ forEachElement (el => {
195+ // ...
196+ })
197+ // 準備が整ったときに `hydrate` を呼び出します
198+ hydrate ()
199+ return () => {
200+ // 必要であれば、後処理(teardown)の関数を返します
201+ }
202+ }
203+
204+ const AsyncComp = defineAsyncComponent ({
205+ loader : () => import (' ./Comp.vue' ),
206+ hydrate: myStrategy
207+ })
208+ ```
209+
111210## Suspense での使用 {#using-with-suspense}
112211
113212非同期コンポーネントは、ビルトインコンポーネント ` <Suspense> ` と使用することもできます。` <Suspense> ` と非同期コンポーネント間のインタラクションについては、[ ` <Suspense> ` のページ] ( /guide/built-ins/suspense ) にドキュメントがあります。
0 commit comments