오늘은 처음부터 페이지 매김을 생성하고 액세스 및 재사용이 가능하도록 만드는 방법을 살펴보겠습니다. 도움이 되셨기를 바라며 포스팅 마지막에 댓글을 남겨주세요!
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, } };
페이지 로드가 중지되면 현재 페이지와 로드 중인 새 배열의 길이를 사용하여 새 메시지를 설정합니다.
이제 그렇습니다! 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); } };
페이지 매김을 구현하려면 목록에서 반복할 배열을 만드는 한 단계가 더 필요합니다! 이를 위해서는 다음 단계를 따라야 합니다.
이 배열은 다음과 같이 페이지의 항목 목록을 얻기 위해 수행할 배열입니다.
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, } };
재사용 가능하고 접근 가능한 페이지 매김을 만드는 방법은 다음과 같습니다! 개인적으로 페이지를 만드는 방법을 라이브 코딩으로 구현해야 했기 때문에 처음부터 배웠습니다. 제 경험이 귀하의 경력에 도움이 되고 구현하고 개선할 수도 있기를 바랍니다!
안녕하세요
운모<3
위 내용은 접근 가능한 구성 요소: 페이지 매김의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!