Skip to content

dmswnlee/google_list

Repository files navigation

Google List

가장 많이 이용하는 사이트 중 하나 인 구글을 벤치마킹 한 투두앱 사이트 입니다.

REST API 활용하여 CRUD를 구현했습니다.


✔️ 배포한 사이트

https://google-list.vercel.app/


✔️ 제작기간

2023.12.22 ~ 2024.01.09


✔️ 사용기술

React.js, SCSS, Axios, zustand


todo-app


✔️ 기능구현

  • API를 활용해 todo Item을 추가, 수정, 삭제 할 수 있습니다.
  • 완료된 투두들은 입력창 옆에 있는 버튼을 눌러 전체 삭제 할 수 있습니다.
  • 수정 버튼을 누르면 수정 모달창이 떠서 수정할 수 있습니다.
  • all, active, completed로 분류된 필터로 기능이 있습니다.
  • todo Item 체크 시 취소선이 표시됩니다.
  • 투두리스트 맨 아래 완료, 미완료, 총합 투두 갯수를 확인할 수 있습니다.
  • todo Item을 등록하고 내가 등록한 아이템을 검색창에 검색하여 찾을 수 있습니다.
  • todo Item 순서를 드래그를 통해 변경할 수 있습니다.
  • 목록이 출력되기 전에는 로딩 애니메이션을 출력합니다.



💡CRUD를 구현하는 상태들은 zustand를 사용해 관리

import { create } from 'zustand';
import axiosCreate from '../utils/api';

export const useTodoStore = create(set => ({
   todos: [],
   setTodos: todos => set({ todos }),
   getTodos: async () => {
      try {
         const res = await axiosCreate.get('/todos');
         set({ todos: res.data });
      } catch (err) {
         console.error('Error:', err);
      }
   },

   // ...
}));

💡 목록의 순서 변경은 react-sortablejs을 사용

// 순서변경
const handleReorder = () => {
   const reordered = todos.map(todo => todo.id);
   onReorder(reordered);
};

<ul className="list">
   <ReactSortable list={todos} setList={setTodos} animation={200} onEnd={handleReorder()}>
      {filtered && filterTodos().map(todo => <TodoItem key={todo.id} todo={todo} />)}
   </ReactSortable>
</ul>;

💡수정 모달창에 api에서 가져온 생성일, 수정일 날짜 표시

수정 모달창


function editDate(time) {
   const date = {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit',
      hour: '2-digit',
      minute: '2-digit',
   };

   return new Date(time).toLocaleDateString('ko-KR', date);
}

💡API 주소, API KEY와 같은 중요정보 .env 파일로 환경 변수 설정

import axios from 'axios';

const axiosCreate = axios.create({
   baseURL: import.meta.env.VITE_URL,
   headers: {
      'Content-Type': 'application/json',
      apikey: import.meta.env.VITE_API_KEY,
      username: 'KDT7_LeeEunJoo',
   },
});

export default axiosCreate



🚨 에러 발생 및 해결 프로젝트를 진행하며 발생했던 에러들을 블로그에 기록했습니다.



💻 프로젝트를 통해 배운점

  • API를 활용하여 프로젝트를 진행해본 것은 처음이라서 많이 헤매는 느낌이 있었으나 axios를 사용해볼 수 있어서 좋았습니다.
  • react-sortablejs과 같은 다양한 리액트 라이브러리에 대해 공부해볼 수 있었습니다.
  • 이번 프로젝트를 진행하며 가장 크게 배운점이라고 할 수 있는 건 리액트 상태관리에 대해서 입니다. 내가 사용하는 많은 상태들을 어떻게 관리할 수 있는지 얼마나 가볍게 그리고 쉽게 사용할 수 있는지에 고민해볼 수 있는 시간이었으며 zustand와 같은 상태관리 라이브러리를 활용해 볼 수 있었습니다.

About

REST API 활용하여 CRUD를 구현한 투두앱 사이트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published