End Page μ λλ¬νμμλλ₯Ό μ΄λ»κ² νμΈνλμ§, λν λ§μ§λ§ νμ΄μ§μ λλ¬νμλ νμ΄μ§μκ° μ¬λΌκ°λκ²μ μ΄λ»κ² μ²λ¦¬νλμ§ κ΅¬νν΄λ³΄κΈ°λ‘ νλ€. κ·Έλ¬κ³ λ§μ§λ§ νμ΄μ§μ λλ¬νμμλλ λμ΄μ λ°μ΄ν° ν¨μΉμ λ§λλ‘ νμλλ°, κ·Έλ¬λ€λ³΄λ λ§μ§λ§ νμ΄μ§μ λλ¬νλ©΄ μ νμ΄μ§λ‘ λμ΄κ°λ λ°μ΄ν° ν¨μΉμ΄ μΌμ΄λμ§ μμλ€.
ν΄κ²°ν μ½λλ μλμ κ°λ€.
export async function getServerSideProps(context) {
const page = context.query.page ? context.query.page : 1
const response = await axios.get(
`http://localhost:3000/api/data?page=${page}`
)
return {
props: {
initialData: response.data,
page,
},
}
}
export default function Search({ initialData, page: initialPage }) {
const [players, setPlayers] = useState(initialData)
const [page, setPage] = useState(initialPage)
const [endPage, setEndPage] = useState(false)
useEffect(() => {
// λ°μ΄ν° ν¨μΉν λ 쑰건μΆκ°
if (page >= initialPage && !endPage) {
fetchPage(page)
} else {
// End Page λλ¬μ νμΈνλ λ°©λ²
setEndPage(false)
}
}, [page, initialPage, endPage])
const fetchPage = async (pageNumber) => {
const response = await axios.get(`/api/data?page=${pageNumber}`)
const newData = response.data
// End Page λλ¬μ νμΈνλ λ°©λ²
if (newData.length === 0) {
setEndPage(true)
// νμ΄μ§ μ¬λΌκ°λκ²μ μ²λ¦¬νλ λ°©λ²
if (page > 1) {
setPage(page - 1) // μ΄μ νμ΄μ§λ‘ λμκ°
}
alert('λ μ΄μ 쑰건μ λ§μ‘±νλ μ μλ μμ΅λλ€.')
return
}
setPlayers(newData)
}
const handlePrevPage = () => {
const prevPage = page > 1 ? page - 1 : 1
setPage(prevPage)
}
const handleNextPage = () => {
setPage(page + 1)
}
return (
<div>
<h1>Search</h1>
{players.map((player, index) => (
<div key={index}>
<h2>{player.Name}</h2>
</div>
))}
<div>
{page > 1 && <button onClick={handlePrevPage}>Prev</button>}
<p>{page}</p>
<button onClick={handleNextPage}>Next</button>
</div>
</div>
)
}