일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 배치파일로 JDK 버전변경
- 백엔드 아키텍처
- Spring Boot
- spring security 로그인
- react 자동입력방지
- 속도기능개선
- 에러
- 스프링 시큐리티
- REACT
- react 심플캡차
- spring error
- 스프링
- Spring Security
- react captcha
- 스프링 시큐리티 로그인
- 리액트 캡차
- react simple captcha
- SpringBoot
- 리액트 심플캡차
- react 캡차
- 계층구조vs도메인구조
- react 상태
- git
- error
- Docker
- maven
- Security 로그인
- 깃
- build
- spring
Archives
- Today
- Total
I can do it(Feat. DEV)
React 게시판 목록 날짜 별로 정렬하기 본문
728x90
어느 날 어김없이 유지보수 요청이 들어왔음.
예약목록이 있는데 날짜별로 정렬할 수 있도록 만들어달라 함.
먼저 대관일시를 클릭했을 때 오름차순인지 내림차순인지 알 수 있도록
표시(▲, ▼)를 추가 후 링크처리 함.
//대관일시 컬럼
<th>
<Link to="#" onClick={e => sortRentDate(e)}> //클릭 시 로직 추가
대관일시
{sortStatus === "up"
? "▲"
: sortStatus === "down"
? "▼"
: ""}
</Link>
</th>
처리 후 정렬 상태를 관리할 변수를 추가해줌.
const [sortStatus, setSortStatus] = useState(null); //대관일시 정렬 상태
클릭했을 때 실행되는 함수임.
//대관일시 클릭했을 때
const sortRentDate = e => {
//대관일시별 정렬기능
e.preventDefault();
if (totalElements <= 10) { //대관 목록이 10개 이하일 때
const sortRents = rents.slice(0).sort((a, b) => { //배열 sort함수
if (sortStatus === "down") {
setSortStatus("up");
return new Date(a.startTime) - new Date(b.startTime);
} else {
setSortStatus("down");
return new Date(b.startTime) - new Date(a.startTime);
}
});
setRents(sortRents); //정렬된 목록 다시 세팅
} else { //대관 목록이 11개 이상일 때
getRents({ //서버에서 대관 목록 가져오는 함수
type: "startTime",
state: sortStatus
? sortStatus === "up"
? "desc"
: "asc"
: "desc"
});
if (sortStatus === "down") {
setSortStatus("up");
} else {
setSortStatus("down");
}
}
};
먼저 대관 목록이 10개 이하일 때, 이상일 때로 나눈 이유는
서버에서 Data를 가져올 때 Page Class를 사용하다보니 페이지별 목록 10개씩(설정한 값)만 받아옴.
그렇기때문에 10개 이하일 때는 서버와 통신하지않고 이미 받아온 목록을 정렬하면 더 빠르게 정렬할 수 있다고 판단했음.(실제 테스트해보니 큰 차이는 없었던 걸로...)
11개부터는 Pageable을 사용하여 sort를 desc, asc로 설정하여 목록을 정렬해 가져옴.
useEffect(() => {
sortStatus
? getRents({ //대관일시 별 정렬상태
type: "startTime", //sortType
state: sortStatus === "up" ? "asc" : "desc"
})
: getRents({ //기본 정렬상태(id, desc)
type: "id", //sortType
state: "desc"
});
}, []);
useEffect를 사용하여 대관 목록을 불러오는데 정렬상태(sortStatus)를 이용하여 분기함.
sortType이란 데이터를 파라미터로 전달해주는데 sortType 안에는 위처럼 type, state를 세팅함.
//axios 비동기식 통신 코드
//실제코드아님 주의!
axios.get(url +
"sort=" +
sortType.type +
"," +
sortType.state,
data)
이런 식으로 서버와 통신할 때 sort 부분에 받아온 sortType(type, state)을 넣어줌.
목록 정렬 완료! 끝.
다들 행복한 주말 보내길.😉
📢참조
728x90
'개발자 모드 > 응용' 카테고리의 다른 글
React 토스페이먼츠 카드 전표 출력하기 (0) | 2022.10.20 |
---|---|
React 회원가입 시 유효성 검사하기 (0) | 2022.10.18 |
Spring Security passwordEncoder 설정 관련 (0) | 2022.10.12 |
React 팝업창 띄우기(2) - 하루 동안 보지 않기 (0) | 2022.10.07 |
React 팝업창 띄우기(1) (0) | 2022.10.06 |