React 애플리케이션에서 페이지네이션과 검색 기능을 연동하는 방법을 알아보겠습니다. 이를 통해 사용자가 검색 결과를 페이지별로 탐색할 수 있게 됩니다.
우선 간단한 이미지 관리 애플리케이션을 가정합니다. 이 애플리케이션에는 이미지 목록이 있고, 사용자는 페이지네이션을 통해 이미지를 탐색할 수 있습니다. 또한 사용자는 검색 기능을 사용하여 이미지를 필터링할 수 있습니다.
다음은 React 컴포넌트에서 페이지네이션과 검색 기능을 연동하는 예시 코드입니다.
javascript
Copy code
import React, { useState, useEffect } from "react";
import Pagination from "./Pagination";
import ImageList from "./ImageList";
const ImageManagement = () => {
// 이미지 목록과 페이지네이션 관련 상태
const [images, setImages] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [imagesPerPage] = useState(10);
// 검색 관련 상태
const [searchInput, setSearchInput] = useState("");
const [filteredImages, setFilteredImages] = useState([]);
// 전체 이미지 목록 초기화 (예시용 더미 데이터)
useEffect(() => {
// imagesDummy.data는 예시용 이미지 목록 데이터입니다.
setImages(imagesDummy.data);
}, []);
// 검색 기능 구현
const handleSearch = (searchValue) => {
setSearchInput(searchValue);
const filteredData = images.filter((image) =>
image.title.toLowerCase().includes(searchValue.toLowerCase())
);
setFilteredImages(filteredData);
setCurrentPage(1); // 검색 시 페이지를 1로 초기화
};
// 현재 페이지에 해당하는 이미지 목록 가져오기
const indexOfLastImage = currentPage * imagesPerPage;
const indexOfFirstImage = indexOfLastImage - imagesPerPage;
const currentImages = searchInput ? filteredImages : images.slice(indexOfFirstImage, indexOfLastImage);
// 페이지 변경 시 처리
const paginate = (pageNumber) => setCurrentPage(pageNumber);
return (
<div>
<h1>이미지 관리</h1>
{/* 검색 폼 */}
<input type="text" onChange={(e) => handleSearch(e.target.value)} placeholder="이미지 검색..." />
{/* 이미지 목록 */}
<ImageList images={currentImages} />
{/* 페이지네이션 */}
<Pagination
imagesPerPage={imagesPerPage}
totalImages={searchInput ? filteredImages.length : images.length}
paginate={paginate}
/>
</div>
);
};
export default ImageManagement;
대략적인 설명
const [images, setImages] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [imagesPerPage] = useState(10);
const [searchInput, setSearchInput] = useState("");
const [filteredImages, setFilteredImages] = useState([]);
useState를 사용하여 이미지 목록(images), 현재 페이지(currentPage), 페이지당 이미지 수(imagesPerPage), 검색 입력값(searchInput), 필터링된 이미지(filteredImages)를 상태로 관리합니다.
useEffect(() => {
setImages(imagesDummy.data);
}, []);
const handleSearch = (searchValue) => {
setSearchInput(searchValue);
const filteredData = images.filter((image) =>
image.title.toLowerCase().includes(searchValue.toLowerCase())
);
setFilteredImages(filteredData);
setCurrentPage(1); // 검색 시 페이지를 1로 초기화
};
const indexOfLastImage = currentPage * imagesPerPage;
const indexOfFirstImage = indexOfLastImage - imagesPerPage;
const currentImages = searchInput ? filteredImages : images.slice(indexOfFirstImage, indexOfLastImage);
현재 페이지에 해당하는 이미지 목록을 가져옵니다. 검색이 적용된 경우 필터링된 이미지를, 그렇지 않은 경우 전체 이미지를 사용합니다.
const paginate = (pageNumber) => setCurrentPage(pageNumber);
paginate 함수를 통해 페이지 변경 시 현재 페이지를 업데이트합니다.
<Pagination
imagesPerPage={imagesPerPage}
totalImages={searchInput ? filteredImages.length : images.length}
paginate={paginate}
/>
페이지네이션 컴포넌트에 페이지당 이미지 수와 전체 이미지 수를 전달하여 페이지를 관리합니다.
<ImageList images={currentImages} />
ImageList 컴포넌트에 현재 페이지에 해당하는 이미지 목록을 전달하여 출력합니다.
위 예시 코드를 통해 React 애플리케이션에서 페이지네이션과 검색 기능을 연동하는 방법을 알아보았습니다.