注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
useCodingTask フックは、高度な to-do アプリケーションでコーディングタスクのデータを取得して管理する機能を提供するカスタム React フックです。基本的なタスクデータにユーザー情報とメタデータを追加し、コンポーネントが簡単に利用できる包括的なデータ構造を作成します。
useCodingTask フックは、オントロジー SDK を活用して、型安全な方法でバックエンドサービスとやり取りします。強力な $as 演算子を使用し、異なるオブジェクトタイプの実装間でピボットします。また、React の状態管理とメモ化のパターンを効果的に使用して、パフォーマンスを最適化する方法も示しています。
useCodingTask のリファレンスコードを表示する。
useCallback を使用して関数をメモ化し、不要な再レンダリングを防ぎます$as 演算子を使用して、オブジェクトタイプ間で型安全にピボットしますuseCodingTask の構造Copied!1 2 3 4 5interface CodingTaskEnriched { osdkCodingTask: osdkCodingTask.OsdkInstance; createdBy: User; assignedTo: User; }
このインターフェースは、SDK のコーディングタスクインスタンスと、タスクの作成者および担当者のユーザーオブジェクトを組み合わせ、コンポーネントの実装を簡素化する統一されたデータ構造を作成します。
useCodingTask フックは、次の処理を行うカスタムフェッチャー関数とともに、SWR のデータ取得機能を使用します。
$as 演算子を使用して、コーディングタスクインターフェースの実装にピボットしますCodingTaskEnriched オブジェクトを構築しますCopied!1 2 3 4 5 6 7 8 9const fetcher = useCallback(async () => { const codingTask = task.osdkTask.$as(osdkCodingTask); const codingTaskEnriched = { osdkCodingTask: codingTask, createdBy: task.createdBy, assignedTo: task.assignedTo, }; return codingTaskEnriched; }, [task]);
useCodingTask フックは、不要なネットワークリクエストを最小限に抑えるように SWR を設定します。
Copied!1 2 3 4{ revalidateOnFocus: false, revalidateOnReconnect: false, }
useCodingTask フックは、オブジェクトタイプのメタデータを取得して、動的な UI 機能を実現します。
Copied!1 2 3 4 5 6 7 8const getObjectTypeMetadata = useCallback(async () => { const objectTypeMetadata = await client.fetchMetadata(osdkCodingTask); setMetadata(objectTypeMetadata); }, [client]); useEffect(() => { getObjectTypeMetadata(); }, [getObjectTypeMetadata]);
このメタデータは、コンポーネントがレンダリングに使用できる、コーディングタスクのオブジェクトタイプに関する情報(表示名やフィールド設定など)を提供します。
useCodingTask フックは、次の構造を持つオブジェクトを返します。
Copied!1 2 3 4 5 6 7{ codingTask: CodingTaskEnriched | undefined; // 情報を付加したコーディングタスク(未読み込みの場合は undefined) isLoading: boolean; // 初回のデータ読み込み中は true isValidating: boolean; // バックグラウンドでの再検証中は true isError: any; // リクエストに失敗した場合のエラーオブジェクト metadata: ObjectMetadata | undefined; // コーディングタスクのオブジェクトタイプに関するメタデータ }
この包括的な戻り値により、コンポーネントはさまざまな状態を処理し、適切な UI をレンダリングするために必要な情報をすべて取得できます。
useCodingTask フックは、$as 演算子を使用して、関連するオブジェクトタイプ間でピボットします。
Copied!1const codingTask: osdkCodingTask.OsdkInstance = task.osdkTask.$as(osdkCodingTask);
このパターンは、TypeScript の型システムを活用して、関連するオブジェクトタイプ間で安全に移行します。
task.osdkTask)は、ポリモーフィックな構造を持ちます$as 演算子は実行時チェックを行い、互換性を検証しますこのアプローチは、基本オブジェクトが特化したサブタイプを持つことができるポリモーフィックなデータモデルに不可欠です。
このフックは、React の useCallback を使用してパフォーマンスを最適化します。
Copied!1 2 3 4 5 6 7const fetcher = useCallback(async () => { // フェッチャーのロジック }, [task]); const getObjectTypeMetadata = useCallback(async () => { // メタデータ取得のロジック }, [client]);
このパターンは、次の処理を行います。
次の外部パッケージを useCodingTask フックとともに使用できます。
目的: バックエンドのデータサービスとやり取りするためのオントロジー SDK クライアント 利点:
useOsdkClient などのフックを公開します目的: 事前定義されたデータ型を持つ、アプリケーション固有の SDK 利点:
osdkCodingTask)を含みます目的: ユーザーデータ型用の Foundry Admin SDK
利点:
createdBy フィールドと assignedTo フィールドで使用する User 型を提供します目的: データ取得、キャッシュ、状態管理 利点:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41import useCodingTask from '../dataServices/useCodingTask'; import type { ITask } from '../dataServices/useTasks'; function CodingTaskDetails({ task }: { task: ITask }) { const { codingTask, isLoading, isError, metadata } = useCodingTask(task); if (isLoading) return <div>Loading coding task details...</div>; if (isError) return <div>Error loading coding task: {isError.message}</div>; if (!codingTask) return <div>No coding task found</div>; return ( <div className="coding-task-details"> <h2>{codingTask.osdkCodingTask.title}</h2> <div className="metadata-section"> <h3>Task Metadata</h3> <div>Object Type: {metadata?.displayName || "Coding Task"}</div> </div> <div className="code-section"> <h3>Code Requirements</h3> <div className="language-badge">{codingTask.osdkCodingTask.language}</div> <pre> <code>{codingTask.osdkCodingTask.codeSnippet}</code> </pre> </div> <div className="people-section"> <h3>People</h3> <div className="assigned-to"> <span>Assigned to: </span> <span>{codingTask.assignedTo?.username ?? "Unassigned"}</span> </div> <div className="created-by"> <span>Created by: </span> <span>{codingTask.createdBy?.username ?? "Unknown"}</span> </div> </div> </div> ); }
useCodingTask フックを使用する前に、次の状況と制限事項を考慮してください。
createdBy または assignedTo に対して undefined を返します。コンポーネントは、この状況を適切に処理する必要があります。$as 操作が実行時に失敗する可能性があります。このフックは現在、このエラーケースを明示的には処理しません。useCodingTask フックは、親タスクオブジェクトに完全に依存します。そのオブジェクトが不正な場合や、必要なデータがない場合、フックは期待される動作をしない可能性があります。