데이터 테이블
이름별 메인 테이블과 ID별 서브 테이블을 읽고, 정렬·선택·검색하는 React + Redux 과제.
React 17Reduxreact-router 6styled-componentsCRA
Data table 의 Reading, Sorting, Selecting, Searching 네 기능을 만든 과제다.
구동 방법
- Reading:
/result에 이름별 메인 테이블이 나온다. 행을 클릭하면 그 이름의 ID별 서브 테이블이 펼쳐진다. - Sorting: 열 이름 옆 버튼으로 오름차순·내림차순 정렬한다. 서브 테이블의 ID 열도 정렬된다.
- Selecting: 서브 테이블 행을 클릭해 선택하면 테이블 위에 따로 모인다.
check all,clear all로 한 이름의 ID 를 모두 선택·해제하고,X로 하나씩 뺀다.view버튼은 선택 목록을 세로·가로로 바꾼다. - Searching: 이름에 문자열이 포함된 행을 찾는다. 재검색하면 결과가 누적되고 최근 검색이 위로 온다.
refresh로 초기화한다.
중점 사항
- 리덕스 코드를 떼어 내기 위해 컨테이너 컴포넌트와 프레젠테이셔널 컴포넌트로 나눴다.
action과reducer는modules/에 모듈별 한 파일로 두고redux-actions의handleActions로 읽기 쉽게 했다. - API 응답을 리스트로 그릴 때 고유 키가 없어서 처음엔
nanoid를 썼다가, 렌더마다 연산이 생겨 항목 값 조합으로 키를 만들었다. 불변성은immer의produce로 관리했다. - 메인·서브 테이블의 로딩은 스피너로 보이고, 정렬 방향은 버튼 색(검정·빨강)으로 표시했다.
플레이그라운드에서 바뀐 것
원래는 과제용 API 서버(http://testapi/result/)에서 데이터를 받았다. 서버가 없어서 같은 모양의 데이터를 public/data/ 에 넣고 거기서 읽도록 바꿨다. 이름과 수치는 임의로 만든 값이다.