1. git clone https://github.com/hjpark625/wanted-pre-onboarding-fe.git
2. cd wanted-pre-onboarding-fe
3. npm install
4. npm start
๋ก๊ทธ์ธ / ํ์๊ฐ์
- '/' ๊ฒฝ๋ก์ ๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์ด์ง ์์ ์ด๋ฉ์ผ ์ ๋ ฅ์ฐฝ, ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ฐฝ, ์ ์ถ ๋ฒํผ์ด ํฌํจ๋ ํํ ๊ตฌ์ฑ
- ์ด๋ฉ์ผ ๋ฐ ๋น๋ฐ๋ฒํธ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ ๊ตฌํ
- ์ด๋ฉ์ผ:
@
ํฌํจ- ๋น๋ฐ๋ฒํธ: 8์ ์ด์
- ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๊ฐ ์ ์กฐ๊ฑด์ ๊ฐ์ท์ ๋ ํ์ฑํ
- ๋ก๊ทธ์ธ APIํธ์ถ ํ ์ฌ๋ฐ๋ฅธ ์๋ต์ ๋ฐ์ ๋
/todo
๊ฒฝ๋ก๋ก ์ด๋
- ๋ก๊ทธ์ธ ์ฑ๊ณต ์ JWT๋ฅผ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ
- ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ฅธ ๋ฆฌ๋ค์ด๋ ํธ ๊ตฌํ
- ํ ํฐ์ด ์์ ๋
/
ํ์ด์ง์ ์ ์์/todo
๋ก ๋ฆฌ๋ค์ด๋ ํธ- ํ ํฐ์ด ์์ ๋
/todo
ํ์ด์ง์ ์ ์์/
๋ก ๋ฆฌ๋ค์ด๋ ํธTodo List
/todo
์ ์ ์ํ๋ฉด todo ๋ชฉ๋ก ๋ ๋๋ง- ๋ฆฌ์คํธ ํ์ด์ง์ todo list์ ๋ด์ฉ๊ณผ ์๋ฃ ์ฌ๋ถ๊ฐ ํ์๋์ด์ผ ํจ
- ๋ฆฌ์คํธ ํ์ด์ง์ ์ ๋ ฅ์ฐฝ, ์ถ๊ฐ๋ฒํผ์ด ์์ผ๋ฉฐ ์ถ๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ ๋ ฅ์ฐฝ์ ๋ด์ฉ์ด ์๋ก์ด todo list๋ก ์ถ๊ฐ
- todo list์ ์์ , ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ
- todo list ๊ฐ๋ณ ์์ดํ ์ฐ์ธก์ ์์ ๋ฒํผ ์กด์ฌํ๊ณ ํด๋ฆญ ์ ์์ ๋ชจ๋ ํ์ฑํํ๊ณ ์์ ์ด ๊ฐ๋ฅ ํ๋๋ก ๊ตฌํ
- ์์ ๋ชจ๋์์ ๊ฐ๋ณ ์์ดํ ์ฐ์ธก์ ์ ์ถ๋ฒํผ๊ณผ ์ทจ์๋ฒํผ์ด ํ์๋๋ฉด์ ๋ฒํผ์ ํตํด ์์ ๋ด์ฉ์ ์ ์ถ, ์์ ์ ์ทจ์ํ๋๋ก ๊ตฌํ
- todo list ๊ฐ๋ณ ์์ดํ ์ฐ์ธก์ ์ญ์ ๋ฒํผ ์กด์ฌํ๊ณ ํด๋ฆญ ์ ์ญ์ ๊ฐ ๋๋๋ก ๊ตฌํ
-
ํ์๊ฐ์ ํ์ด์ง
- ํ์๊ฐ์
์ ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ฌ ์ ์ ๊ฐ ์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์
๋ ฅํ ์ ์๋๋ก ์ ๋
- ์กฐ๊ฑด์ด ๋ถ์ผ์น ํ ๊ฒฝ์ฐ ์ ์ถ ๋ฒํผ์ด ๋นํ์ฑํ
- ๋ฒํผ์
disabled
์์ฑ ๋ถ์ฌ cursor: not-allowed
์ ๋ฒํผ ๋ฐฐ๊ฒฝ์์ ํ์์ผ๋ก ์ธํ
- ๋ฒํผ์
- ์กฐ๊ฑด์ด ๋ถ์ผ์น ํ ๊ฒฝ์ฐ ์ ์ถ ๋ฒํผ์ด ๋นํ์ฑํ
/
๋จ์ผ๊ฒฝ๋ก ๋ด์type
์ ์ค์ ํ์ฌ ํ์๊ฐ์ ๋ฒํผ๊ณผ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ ์ ๋ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ํตํด ๋ชฉ์ ์ ๋ง๋ ํ์ด์ง ๋ ๋๋ง
- ํ์๊ฐ์
์ ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ฌ ์ ์ ๊ฐ ์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์
๋ ฅํ ์ ์๋๋ก ์ ๋
-
๋ก๊ทธ์ธ ํ์ด์ง
- ํ์๊ฐ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํด ์ ์ ๊ฐ ์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์
๋ ฅํ ์ ์๋๋ก ์ ๋
- ์กฐ๊ฑด๋ถ์ผ์น ์ ํ์๊ฐ์ ๊ณผ ๋์ผํ ์์ฑ ์ ์ฉ
- ๋ก๊ทธ์ธ ์ฑ๊ณต ์
/todo
ํ์ด์ง๋ก ์ด๋
- ํ์๊ฐ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํด ์ ์ ๊ฐ ์ฌ๋ฐ๋ฅธ ์ ๋ณด๋ฅผ ์
๋ ฅํ ์ ์๋๋ก ์ ๋
-
๋ ๋๋ง์ด ๋๋ ํ์ด์ง์์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ํ ํฐ์ ์ ๋ฌด๋ฅผ ํ๋จํด
/
ํน์/todo
๋ก ๋ฆฌ๋ค์ด๋ ํ ๊ตฌํ// ํ ํฐ์ด ์์ ๋ ๋ก๊ทธ์ธ ํ์ด์ง ์ ์ ์(main.tsx) const token = localStorage.getItem('access_token'); const checkToken = () => { token && navigate('/todo'); }; useEffect(() => { checkToken(); }, []); // ํ ํฐ์ด ์์ ๋ todo ํ์ด์ง ์ ์ ์(todo.tsx) const token = localStorage.getItem('access_token'); const checkToken = () => { !token && navigate('/'); }; useEffect(() => { checkToken(); }, []);
-
Create(TodoInsert.tsx)
setTodoValue
๋ฅผ ํ์ฉํด inputํ๊ทธ์ ์ ๋ ฅ๊ฐ์ ์ ์ฅ- ์ ์ฅํ ์
๋ ฅ๊ฐ์ onSubmit ํจ์์
POST
๋ก API์์ฒญ๋ฌธ ์์ฑasync / await
์ ํตํดpost
์์ฒญ์ด ์๋ฃ๋๋ฉด ์ ์ก์ด ์๋ฃ๋๋ฉด ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์GET
์์ฒญ์ผ๋ก ๋ฐ์์ค๊ธฐ
GET
์์ฒญ์ผ๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ค์ ๋ ๋๋ง ํ๊ฒ๋ ๊ธฐ๋ฅ ๊ตฌํ
-
Read(Todo.tsx & TodoList.tsx + TodoListItem.tsx)
- Todo.tsx์ ์๋ฒ ์์ฒญ ์ ๋ค์ด์ค๋ todo ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ state ์ค์
- ํ์ด์ง๊ฐ ๋ํ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ผํ๊ธฐ ๋๋ฌธ์
useEffect
๋ฅผ ํ์ฉํ์ฌ ์ต์ด ๋ ๋๋ง ๋ ๋GET
์์ฒญ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์setTodo
์ ์ ์ฅ
- ํ์ด์ง๊ฐ ๋ํ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ผํ๊ธฐ ๋๋ฌธ์
- ์ ์ฅ๋ todo๋ฐ์ดํฐ๋ฅผ TodoList.tsx์ props๋ก ์ ๋ฌ
- ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ
map
์ ํตํ์ฌ ๋ ๋๋ง
- ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ
- TodoListItem.tsx์ ์ต์ข ์ ์ผ๋ก ๋ฐ์ดํฐ๋ค์ ์ ๋ฌํ์ฌ ๋ ๋๋ง
- Todo.tsx์ ์๋ฒ ์์ฒญ ์ ๋ค์ด์ค๋ todo ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ state ์ค์
-
Update(TodoListItem.tsx)
- ์์ ๋ฒํผ์ ๊ฐ ๋ ๋๋ง ๋๋ ๋ฐ์ดํฐ ์ฐ์ธก์ ์ ์ํ์ฌ ์์ ๋ฒํผ ํด๋ฆญ์ input์ฐฝ์ด ๋์ค๊ฒ๋ ๊ตฌํ
- ์์ ํ๋ ์ฌํญ์์ ์๊ฒ ํ๊ธฐ์ํด ์์ ๋ฒํผ ํด๋ฆญ ์ ํ์์ผ๋ก ๋ฐ๋๊ณ input์ฐฝ์ ๊ธ์๊ฐ ํ์์ผ๋ก ๋ณ๊ฒฝ
- ์์ ์๋ฃ ์(enter๋ฅผ ์ณค์ ๋) ๋ฐ๋ก
PUT
์์ฒญ์ ๋ณด๋PUT
์์ฒญ ์๋ฃ์Create
๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋๋ ๋ฐ์ดํฐ๋ฅผGET
์์ฒญ์ผ๋ก ๋ฐ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง
- ์์ ๋ฒํผ์ ๊ฐ ๋ ๋๋ง ๋๋ ๋ฐ์ดํฐ ์ฐ์ธก์ ์ ์ํ์ฌ ์์ ๋ฒํผ ํด๋ฆญ์ input์ฐฝ์ด ๋์ค๊ฒ๋ ๊ตฌํ
-
Delete(TodoListItem.tsx)
- ์ญ์ ๋ฒํผ๋ ์์ ๋ฒํผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋๋ง๋๋ ๋ฆฌ์คํธ ์ฐ์ธก์ ๋ ๋๋ง
- ์ญ์ ๋ฒํผ์ ํด๋ฆญํ์ ๋ url์ ํด๋น ์์ดํ
์ id๋ฅผ params์ ๋ด์
DELETE
API์์ฒญ- ์์ฒญ ์ฑ๊ณต ์ ํด๋น ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉด ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฐ์ดํฐ๋ฅผ
GET
์์ฒญ์ผ๋ก ๋ฐ์์ ๋ ๋๋ง ์ค์
- ์์ฒญ ์ฑ๊ณต ์ ํด๋น ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉด ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ฐ์ดํฐ๋ฅผ