드래그 앤 드랍이 가능한 Todo List 입니다.
Github pages를 이용하여 배포했습니다.
# 실행 전 패키지를 설치합니다.
npm install
# 서버를 실행합니다.
npm start
카테고리를 사용자가 직접 추가할 수 있게 만들었고 카테고리의 순서 또한 임의로 드래그앤드랍하여 수정할 수 있습니다. 카테고리 생성 시 중복된 카테고리는 유효성 검증을 통과하지 못하고 사용자에게 피드백을 줬습니다.
카테고리의 왼쪽 위 x 버튼을 클릭하여 생성한 카테고리를 삭제할 수 있게 했습니다.
카테고리 별 세부 카드를 작성할 수 있습니다. 카테고리 내에서 드래그 앤 드랍으로 순서를 변경할 수 있으며 다른 카테고리로 카드를 옮길수 있게 했습니다.
카드를 쓰레기통으로 드래그 앤 드랍하면 삭제할 수 있습니다. 드래그시 쓰레기통이 확대됨과 동시에 흔들리는 애니메이션으로 삭제되는 느낌을 줬습니다.
recoil의 atom effect를 통해 데이터가 로컬 스토리지에 저장됩니다. 이를 통해 창을 껐다 키더라도 데이터가 유지됩니다.
카테고리와 카드의 데이터는 객체에 key 값으로 카테고리 이름을, value 값으로 카드의 id와 내용을 가진 객체 배열로 저장됩니다.
카테고리 드래그 앤 드랍의 경우 Object.keys()
를 사용하여 카테고리 이름(key)만 배열로 따로 빼온 뒤, splice()
를 통해 배열의 위치를 바꾸고, Object.assign()
을 통해 key-value 값을 다시 설정해 주는 방법을 택했습니다.
Lines 33 to 49 in 556ae9f
하지만 객체의 경우 순서가 보장되지 않는 데이터 구조이기 때문에 카테고리 시작 이름이 숫자일 경우 사용자가 드래그 앤 드랍으로 수정한 카테고리 순서가 적용되지 않는 문제점이 있었습니다.
현재 카테고리 생성 시 유효성 검사를 통해 카테고리 이름이 숫자로 시작할 경우 생성을 막는 방법으로 해결했습니다.
Frontend : React, Recoil, TypeScript, styled-components, react-beautiful-dnd, react-hook-form