preloadModule
を使用すると、使用することが予想されるESMモジュールを事前にフェッチできます。
preloadModule("https://example.com/module.js", {as: "script"});
リファレンス
preloadModule(href, options)
ESMモジュールをプリロードするには、react-dom
からpreloadModule
関数を呼び出します。
import { preloadModule } from 'react-dom';
function AppRoot() {
preloadModule("https://example.com/module.js", {as: "script"});
// ...
}
preloadModule
関数は、ブラウザに指定されたモジュールのダウンロードを開始するようにヒントを提供し、時間を節約できます。
パラメータ
href
:文字列。ダウンロードするモジュールのURL。options
:オブジェクト。次のプロパティが含まれます。as
:必須の文字列。'script'
である必要があります。crossOrigin
:文字列。使用するCORSポリシー。可能な値はanonymous
とuse-credentials
です。integrity
:文字列。モジュールの暗号化ハッシュ。その真正性を検証するため。nonce
:文字列。厳格なコンテンツセキュリティポリシーを使用する場合にモジュールを許可するための暗号化nonce。
戻り値
preloadModule
は何も返しません。
注意事項
- 同じ
href
でブラウザでは、コンポーネントのレンダリング中、Effect 内、イベントハンドラ内など、あらゆる状況で
preloadModule
を呼び出すことができます。 - サーバーサイドレンダリングや Server Components のレンダリング時、
preloadModule
は、コンポーネントのレンダリング中、またはコンポーネントのレンダリングに起因する非同期コンテキスト内で呼び出された場合にのみ効果があります。それ以外の呼び出しは無視されます。
使用法
レンダリング時のプリロード
特定のモジュールがコンポーネントまたはその子によって使用されることがわかっている場合は、コンポーネントのレンダリング時に preloadModule
を呼び出します。
import { preloadModule } from 'react-dom';
function AppRoot() {
preloadModule("https://example.com/module.js", {as: "script"});
return ...;
}
ブラウザにモジュールのダウンロードだけでなく、すぐに実行を開始させたい場合は、代わりに preinitModule
を使用します。ESM モジュールではないスクリプトをロードしたい場合は、preload
を使用します。
イベントハンドラでのプリロード
モジュールが必要になるページや状態に移行する前に、イベントハンドラ内で preloadModule
を呼び出します。これにより、新しいページや状態のレンダリング中に呼び出すよりも早く処理を開始できます。
import { preloadModule } from 'react-dom';
function CallToAction() {
const onClick = () => {
preloadModule("https://example.com/module.js", {as: "script"});
startWizard();
}
return (
<button onClick={onClick}>Start Wizard</button>
);
}