メインコンテンツまでスキップ

React シングルページアプリケーション

注記

これらの手順は、React を使用して構築された SPA に適用されます。一般的な SPA 統合ドキュメントについては、このページを参照してください。

シングルページアプリケーション (SPA) に Rokt を統合するには、標準のマルチページアプリケーションよりも多くの考慮が必要です。SPA はページ遷移間で状態を保持し、従来のウェブサイトよりもネイティブアプリのように動作します。

React SPA の場合、Rokt はシングルトンとして一度起動されるべきです。プレースメントがレンダリングの準備ができたら、アプリケーションはそのシングルトンと対話できます。

React Context を使用してシングルトンへの参照を保持できます。React Hooks を使用して、そのシングルトン参照を取得し、対話することができます。

React Context ラッパー

以下は、Rokt のためのコンテキストプロバイダーの例です。

import React, { createContext, useContext, useEffect } from "react";

export const RoktLauncherContext = createContext(null);

export function useRoktLauncher() {
return useContext(RoktLauncherContext);
}

export function RoktLauncherContextProvider({
children,
accountId,
sandbox = false,
}) {
const [launcher, setLauncher] = useState(null);

useEffect(() => {
(async () => {
// コンテキストが作成されるときに Rokt スクリプトがまだアプリケーションにロードされていることを防ぐ
await new Promise((resolve) =>
window.Rokt
? resolve()
: (document.getElementById("rokt-launcher").onload = resolve)
);

const launcherInstance = await window.Rokt.createLauncher({
accountId: accountId,
sandbox: sandbox,
});

setLauncher(launcherInstance);
})();

return () => {
if (launcher) {
launcher.terminate();
}
};
}, [accountId, sandbox]);

// コンテキストプロバイダーを返す
return (
<RoktLauncherContext.Provider value={launcher}>
{children}
</RoktLauncherContext.Provider>
);
}

コンテキストの利用

アプリケーションルート

App コンポーネントを次のコンテキストプロバイダーでラップします:

ReactDOM.render(
<RoktContextProvider accountId="YOUR_ROKT_ACCOUNT_ID" sandbox={true}>
<App />
</RoktContextProvider>
);

本番環境にデプロイする際には、sandbox フラグを削除するか、false に設定する必要があります。

ルート上

Rokt プレースメントを表示するページでは、Rokt シングルトンを使用して Rokt セレクションをトリガーするように指示します:

import React, { useEffect, useRef } from "react";

// これは確認ページルートのコンポーネントだと想像してください
export function ConfirmationPage() {
// Rokt に渡す関連する属性を内部の場所から取得します
const attributes = useAttributes();
const launcher = useRoktLauncher();

useEffect(() => {
// ランチャーが初期化されていないか、統合属性が存在しない場合は戻ります
if (!launcher || !attributes.email) {
return;
}

const selectionPromise = launcher.selectPlacements({
attributes: attributes,
identifier: "confirmation.page",
});

return () => {
if (selectionPromise) {
// ページが閉じるときに、すべての Rokt プレースメントを削除します
selectionPromise.then((selection) => selection.close());
}
};
}, [launcher, attributes]);

return (
<div>
<h1>確認ページ</h1>
<div id="rokt-placeholder" />
</div>
);
}
注記

Rokt Ads クライアントでコンバージョンを報告しようとしている場合は、コンテキストを利用する際にこのコード例を参照してください:

import React, { useEffect, useRef } from "react";

// これは確認ページルートのコンポーネントだと想像してください
export function ConversionPage() {
// Rokt に渡す関連する属性を内部の場所から取得します
const attributes = useAttributes();
const launcher = useRoktLauncher();

useEffect(() => {
// ランチャーが初期化されていないか、統合属性が存在しない場合は戻ります
// この例では、passbackconversiontrackingid 値の存在も確認します
if (
!launcher ||
!attributes.email ||
!attributes.passbackconversiontrackingid
) {
return;
}

const selectionPromise = launcher.selectPlacements({
attributes: attributes,
identifier: "conversion.page",
});
}, [launcher, attributes]);
}
この記事は役に立ちましたか?