ホームページ > 記事 > ウェブフロントエンド > アクセス可能なコンポーネント: ページネーション
今日は、ページネーションを最初から作成し、アクセスして再利用できるようにする方法を見ていきます。お役に立てば幸いです。投稿の最後にコメントを残してください。
Github: https://github.com/micaavigliano/accessible-pagination
プロジェクト: https://accessible-pagination.vercel.app/
const useFetch = <T,>(url: string, currentPage: number = 0, pageSize: number = 20) => { const [data, setData] = useState<T | null>(null); const [loading, setLoading] = useState<boolean>(true); const [error, setError] = useState<boolean>(false); useEffect(() => { const fetchData = async() => { setLoading(true); setError(false); try { const response = await fetch(url); if (!response.ok) { throw new Error('network response failed') } const result: T = await response.json() as T; setData(result) } catch (error) { setError(true) } finally { setLoading(false); } }; fetchData() }, [url, currentPage, pageSize]); return { data, loading, error, } };
ページにアクセスするには、次の点を考慮する必要があります:
aria-pointset は、ページ上のすべての項目内の項目の位置を計算するために使用されます。スクリーン リーダーは次のようにアナウンスします:
これを達成するために、次のようにコード化します:
const useFetch = <T,>(url: string, currentPage: number = 0, pageSize: number = 20) => { const [data, setData] = useState<T | null>(null); const [loading, setLoading] = useState<boolean>(true); const [error, setError] = useState<boolean>(false); useEffect(() => { const fetchData = async() => { setLoading(true); setError(false); try { const response = await fetch(url); if (!response.ok) { throw new Error('network response failed') } const result: T = await response.json() as T; setData(result) } catch (error) { setError(true) } finally { setLoading(false); } }; fetchData() }, [url, currentPage, pageSize]); return { data, loading, error, } };
ページの読み込みが停止したら、currentPage と読み込み中の新しい配列の長さを使用して新しいメッセージを設定します。
それでは、はい!ファイル pagination.tsx
でコードがどのように構成されているかを見てみましょう。コンポーネントには 5 つのプロップが必要です
const [statusMessage, setStatusMessage] = useState<string>(""); useEffect(() => { window.scrollTo({ top: 0, behavior: 'smooth' }); if (!loading) { setStatusMessage(`Page ${currentPage} loaded. Displaying ${data?.near_earth_objects.length || 0} items.`); } }, [currentPage, loading]);
interface PaginationProps { currentPage: number; totalPages: number; nextPage: () => void; prevPage: () => void; goToPage: (page: number) => void; }
const handlePageChange = (newPage: number) => { setCurrentPage(newPage); }; const nextPage = () => { if (currentPage < totalPages) { handlePageChange(currentPage + 1); } };
const prevPage = () => { if (currentPage > 1) { handlePageChange(currentPage - 1); } };
ページネーションを有効にするには、リスト内で反復する配列を作成するという、もう 1 つのステップが必要です。そのためには、次の手順に従う必要があります:
この配列は、次のようにページ内の項目のリストを取得するために通過するものです:
const useFetch = <T,>(url: string, currentPage: number = 0, pageSize: number = 20) => { const [data, setData] = useState<T | null>(null); const [loading, setLoading] = useState<boolean>(true); const [error, setError] = useState<boolean>(false); useEffect(() => { const fetchData = async() => { setLoading(true); setError(false); try { const response = await fetch(url); if (!response.ok) { throw new Error('network response failed') } const result: T = await response.json() as T; setData(result) } catch (error) { setError(true) } finally { setLoading(false); } }; fetchData() }, [url, currentPage, pageSize]); return { data, loading, error, } };
そして、再利用可能でアクセスしやすいページネーションを作成する方法は次のとおりです。私個人としては、ライブ コーディングでページを実装する必要があったため、ページの作成方法を一から学びました。私の経験があなたのキャリアに役立ち、実装して改善できることを願っています。
こんにちは、
マイカ
以上がアクセス可能なコンポーネント: ページネーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。