Table에 있는 데이터들을 column별로 정렬해야 한다
데이터의 형식에 따라 comparator를 따로 구현하였다
1const comparatorStr = (a, b, order) => {
2 if (order === Order.ASC) return a.localeCompare(b);
3 return b.localeCompare(a);
4};
5
6const comparatorInt = (a, b, order) => {
7 if (order === Order.ASC) return a > b ? 1 : -1;
8 return a < b ? 1 : -1;
9};
정렬할 키나 순서가 바뀔때 마다 정렬을 수행한다
1useEffect(() => {
2 if (sortBy === Key.NAME)
3 setStateList(
4 [...stateList].sort((a, b) => comparatorStr(a.name, b.name, sortOrder))
5 );
6 else if (sortBy === Key.SIZE)
7 setStateList(
8 [...stateList].sort((a, b) => comparatorInt(a.size, b.size, sortOrder))
9 );
10}, [sortBy, sortOrder]);
정렬할 키, 순서는 다음과 같이 정한다
1const sortHandle = (key) => {
2 // (현재 선택 된 키를 다시 눌렀을 때 && 현재 오름차순 정렬일 때) -> 내림차순
3 if (sortBy === key && sortOrder === Order.ASC) setSortOrder(Order.DESC);
4 // 나머지 모든 경우 -> 오름차순
5 else setSortOrder(Order.ASC);
6 // update sortBy
7 setSortBy(key);
8};
느낀 점
- 나름 신경썼는데 UI측면에서 내 방식이 적절한 방식인지 잘 모르겠다.