Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- react jsx if
- Javascript
- 텍스트가 많은 경우
- react
- SpringBatch 스키마
- react Page
- react quill custom
- Docker Windows 설치
- Spring JPA
- JPA Update\
- springbatch
- react Quill
- editor Quill
- spring builder
- Spring CORS
- Spring DTO
- javascript 기초
- springbatch chunk
- react link
- Spring Controller return
- step 테이블
- JPA Insert
- react forwardRef
- Spring Entity
- spring
- javascript 함수
- javascrpit 기초
- 코드 중복제거
- react react-router-dom v6
- spring security
Archives
- Today
- Total
천천히 알아보는 코딩공부
[react] 게시판 조회 및 Page 처리 - 라이브러리 사용 X 본문
react pagination 라이브러리를 사용 하지 않고 규현한 소스다
오타가 있을수도 있다...ㅠ
- Spring
https://daeseok94.tistory.com/59
[Spring] API로 페이징 처리 Pageable
게시판들을 보면 게시글을 전체 조회 하지않고 개수를 정해서 조회를 하고 페이지 별로 나눠져서 조회를 하고 있다 구현해보자!! JPA로 구현하였다. Controller @RestController @RequestMapping("/adminKisline/no
daeseok94.tistory.com
import React, {useState, useEffect} from 'react';
import axios from 'axios';
function NoticeList() {
const [page, setPage] = useState(0); // 페이지 변경 시 게시판 조회
const [notices, setNotice] = useState(null); // 게시판 내용
const [loading, setLoadin] = useState(false);
const [error, setError] = useState(null);
const [totPage, setTotPage] = useState(null); // 총 페이지
//이전페이지 버튼 누를때
const previouis = (event) =>
{
if(page == 0)
{
window.alret("최초 페이지입니다.")
}
else
{
setPage(page -1);
}
};
//이후 페이지 버튼 누를때
const next = (event) =>
{
if(page + 1 == totPage)
{
window.alret("마지막 페이지입니다.")
}
else
{
setPage(page + 1);
}
};
//페이지버튼 세팅 (< 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 >)
const pageSetting = () =>
{
const result = [];
if(page < 5) //페이지 0,1,2,3,4 페이지일 경우 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 고정
{
for (let i = 0; i< 10; i++)
{
if(i == totPage) // 해당 끝 페이지일 경우 for문 멈춤
{
break;
}
else
{
if(i == page) // 현재페이지일 경우 이벤트 제외 글씨 굵게
{
result.push(<li class="page-item"><a class="page-link"><b> {i +1}</b></a></li>);
}
else
{
result.push(<li class="page-item"><a class="page-link" href = "#" onClick = {(event) => setPage(event.target.innerText-1)}> {i +1} </a></li>);
}
}
}
}
else
{
for (let i = page -5; i<page +5 ; i++)
{
if(i < 0)
{
continue;
}
if(i == totPage) // 해당 끝 페이지일 경우 for문 멈춤
{
break;
}
else
{
if(i == page)
{
result.push(<li class="page-item"><a class="page-link"><b> {i +1}</b></a></li>);
}
else
{
result.push(<li class="page-item"><a class="page-link" href = "#" onClick = {(event) => setPage(event.target.innerText-1)}> {i +1} </a></li>);
}
}
}
}
return result;
};
useEffect(() => {
const fetch = async () => {
try{
//요청이 시작 할 때에는 error 와 notice 초기화
setError(null);
setNotice(null);
//loading 상태를 true로 바꿉니다.
setLoading(true);
const responseNoticeList = await axios.get(
'http://localhost:9090/adminKisline/notice/noticeSelect?page=' + page + '&size=' + 10 );
setNotice(responseNoticeList.date);
setTotPage(responseNoticeList.data.totalPages); // 총 페이지수 받기
} catch (e) {
setError(e);
console.log(e);
}
setLoading(false);
};
fetch();
}, [page]); // 현재 페이지가 변하면 API 호출
if (loading) return <div> 로딩중...</div>;
if (error) return <div> API 호출 에러가 발생했습니다 </div>;
if (!notices) return null;
return (
... 생략
<tbody>
{notices.content.map(notice => (
<tr>
<th scope = "row"><a href ="#"> {notice.id}</a></th>
... 생략
</tr>
</tbody>
))}
... 생략
{/* < 버튼 */}
<li class= "page-item">
<a class= "page-link" href="#" aria-label = "Previous" onClick = {(event) => previous(event)}>
</li>
{pageSetting() // 페이지}
<li class= "page-item">
<a class= "page-link" href="#" aria-label = "Next" onClick = {(event) => next(event)}>
</li>
{/* > 버튼 */}
);
}
export default NoticeList;
'React > 예제' 카테고리의 다른 글
[react] editor Quill 사용해보기 (0) | 2022.11.25 |
---|
Comments