React - column을 기준으로 정렬하기

🏷️ react

수정일 : 2024-11-15


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측면에서 내 방식이 적절한 방식인지 잘 모르겠다.