関数フェッチング
Intlayerを使用すると、コンテンツモジュール内で同期または非同期のコンテンツ関数を宣言できます。アプリケーションがビルドされると、Intlayerはこれらの関数を実行して関数の結果を取得します。戻り値はJSONオブジェクト、または文字列や数値のような単純な値である必要があります。
警告: 関数フェッチングは現在、JSONコンテンツ宣言およびリモートコンテンツ宣言ファイルでは利用できません。
関数宣言
以下は、シンプルな同期関数でコンテンツをフェッチする例です:
**/*.content.ts
import type { Dictionary } from "intlayer";const functionContent = { key: "function_content", content: { text: () => "これは関数によってレンダリングされたコンテンツです", },} satisfies Dictionary;export default functionContent;
この例では、textキーに文字列を返す関数が含まれています。このコンテンツは、Intlayerのreact-intlayerのようなインタープリターパッケージを使用してReactコンポーネント内でレンダリングできます。
非同期関数フェッチング
同期関数に加えて、Intlayerは非同期関数もサポートしており、外部ソースからデータをフェッチしたり、モックデータでデータ取得をシミュレートしたりすることができます。
以下は、サーバーフェッチをシミュレートする非同期関数の例です:
**/*.content.ts
import { setTimeout } from "node:timers/promises";import type { Dictionary } from "intlayer";const fakeFetch = async (): Promise<string> => { // サーバーからのフェッチをシミュレートするために200ms待機 return await setTimeout(200).then( () => "これはサーバーからフェッチされたコンテンツです" );};const asyncFunctionContent = { key: "async_function", content: { text: fakeFetch },} satisfies Dictionary;export default asyncFunctionContent;
この場合、fakeFetch関数はサーバー応答時間をシミュレートするための遅延を模倣します。Intlayerは非同期関数を実行し、その結果をtextキーのコンテンツとして使用します。
Reactコンポーネントで関数ベースのコンテンツを使用する
Reactコンポーネントで関数ベースのコンテンツを使用するには、react-intlayerからuseIntlayerをインポートし、コンテンツIDを使用してコンテンツを取得します。以下はその例です:
**/*.jsx
import type { FC } from "react";import { useIntlayer } from "react-intlayer";const MyComponent: FC = () => { const functionContent = useIntlayer("function_content"); const asyncFunctionContent = useIntlayer("async_function_content"); return ( <div> <p>{functionContent.text}</p> {/* 出力: これは関数によってレンダリングされたコンテンツです */} <p>{asyncFunctionContent.text}</p> {/* 出力: これはサーバーからフェッチされたコンテンツです */} </div> );};export default MyComponent;
このドキュメントを改善するアイデアがある場合は、GitHubでプルリクエストを送信することで自由に貢献してください。
ドキュメントへのGitHubリンク