@open-press/core
useSource
これは、Pressのツリー構造で解決されたソースマップから登録済みのMDXソースを読み取るためのReactフックです。同期的なので、<Press>内のどこでも安全に呼び出すことができます。
useSource は、<Press> のレンダリングツリー内で解決済みのMDXソースデータ構造を安全に取得するために設計された同期Reactフックです。
ソースIDに基づいて解決済みのMDX ASTおよびメタデータを抽出します。エンジンはデータがレンダリングサイクル前に設定されることを保証するため、このメソッドはnullを返しません。
import { useSource } from "@open-press/core"; function useSource<T = ResolvedSource>(id: string): T パラメータ (Parameters)
| Name | Type | Default | Description |
|---|---|---|---|
id required | string | ` |
戻り値 (Returns)
| Name | Type | Default | Description |
|---|---|---|---|
ResolvedSource | object | エンジンによって解決されたソースオブジェクト。ブロック (blocks)、ブロックソースマップ (source maps)、およびカスタムメタデータが含まれます。TypeScriptのジェネリック ` |
例外 (Throws)
| Name | Type | Default | Description |
|---|---|---|---|
Outside Press Boundary | Error | 呼び出し元に `PressContext` がない(` | |
Unknown Source ID | Error | 渡された `id` が登録されていない場合にスローされ、登録済みのソースリストのヒントが添付されます。 |
例:ソースメタデータへのアクセス
import { useSource } from "@open-press/core";
function CustomTableOfContents() {
const story = useSource("story");
return (
<ul>
{story.sections.map((s) => (
<li key={s.id}>{s.title}</li>
))}
</ul>
);
}例:ジェネリクスによる型キャスト
import { useSource, type ResolvedSource } from "@open-press/core";
interface StorySource extends ResolvedSource {
sections: Array<{ id: string; title: string; chapterCount: number }>;
}
function ChapterCounts() {
const story = useSource<StorySource>("story");
return story.sections.map((s) => (
<div key={s.id}>{s.title}: {s.chapterCount} chapters</div>
));
} 適用シナリオと制限事項
適用シナリオ:
- 低レベルツールの開発:
<Sections>に代わるカスタムの原稿アロケータを作成する。 - 高度なレイアウトコンポーネント:非標準のツリー構造の目次 (
TOC) を構築する。 - グローバル情報インターフェース:ソース集約データへのアクセスが必要なカスタムのヘッダー、フッター、または統計ダッシュボード。
禁止パターン:
- MDXブロックの内部:MDXノードはすでにコンパイルパイプライン内にあるため、Prop drillingに依存すべきであり、フックを介してデータを逆方向に再取得すべきではありません。
- 非Reactランタイム:サーバーサイドスクリプトや
<Press>境界の外側で呼び出そうとする場合。外部スクリプトの場合は、出力されたdocument.jsonを直接解析する必要があります。