1. 프로젝트 생성
나는 yarn을 사용하므로
yarn create react-app my-app --template typescript
cd my-app
yarn start
2. todolist 만들기
강의에서 실습했던 것들을 참고해서 만들어봐야겠다
App.tsx 파일에 만들면 된다.
있어야 할 기능
- 할 일 추가 submit
- 할 일 삭제 remove
- 할 일 수정 correct
- 할 일 변경 change
*****
이런 오류가 뜨길래 뭘까,, 하고 어떻게 해도 고쳐지지 않아서 그냥 프로젝트를 다시 생성해서 코드를 붙여넣었는데 제대로 yarn start가 되었다.
"scripts": {
"start": "tsc && node ./dist/index.js",
"build": "tsc --build",
"clean": "tsc --build --clean"
},
아마 이걸 해서 그런 것 같다.
이걸 안했더니 오류가 안뜬다.
잊지 말자!!!!!!!
내가 전에 만든 리액트 투두리스트와 실습들을 참고해서 짜집기한 코드
실패작 1.
취소를 눌렀을 때 완료로 바뀌지 않고 내용이 안뜬다.
그래서 여기서 바꾼 것은
1) "content"라고 따옴표가 있던 것들을 그냥 content 라고 넣었더니 내가 넣은 제목과 내용이 나왔다.
2) 취소버튼과 완료 버튼을 따로 생성했다. 둘 다 changeTodos함수로 관리하려니 전혀 관리가 안된다.
실패작 2. 제목을 뭐라고 쓰던 모두 New Todo Title과 New Todo Content라고 뜬다.
그리고 오류를 하나씩 고쳐갔다.
오류 1. 추가를 클릭했을 때 제목과 내용이 안뜨는 것 (enter키를 눌렀을 때만 뜬다.)
(e.key === "Enter" || e.currentTarget.nodeName === "BUTTON"
오류2. 인풋창 글씨가 추가한 후에 사라지지 않는다.
setTitle("");
setContent("");
오류3. 완료누르면 done영역으로 가야하고 , 취소 누르면 working영역으로 가야한다.
<h2>Working...</h2>
{todos
.filter((todo) => !todo.isDone)
.map((todo) => (
<div key={todo.id}>
<>
<h3>{todo.id}</h3>
<h4>{todo.title}</h4>
<h5>{todo.content}</h5>
<button onClick={() => handleRemoveTodo(todo.id)}>삭제</button>
<button onClick={() => handleDoneTodo(todo.id)}>완료</button>
</>
</div>
))}
<h2>Done</h2>
{todos
.filter((todo) => todo.isDone)
.map((todo) => (
<div key={todo.id}>
<>
<h3>{todo.id}</h3>
<h4>{todo.title}</h4>
<h5>{todo.content}</h5>
<button onClick={() => handleRemoveTodo(todo.id)}>삭제</button>
<button onClick={() => handleCancelTodo(todo.id)}>취소</button>
</>
</div>
이런식으로 바꿔줬다. working영역과 done영역을 나눠서 썼더니 됐다.
- 유효성 검사
제목과 내용 중에 한 칸이라도 작성하지 않으면 추가가 안되게 하고 싶다.
function handleAddTodo(
id: number,
title: string,
content: string,
isDone: boolean
): void {
if (title.trim() === "" || content.trim() === "") {
alert("제목과 내용을 모두 작성해주세요.");
return;
}
const newTodo: Todo = { id, title, content, isDone };
setTodos((prev) => [...prev, newTodo]);
setTitle("");
setContent("");
}
공란이면 alert창이 뜬다
-스타일 컴포넌트까지 적용한 결과물
'TypeScript' 카테고리의 다른 글
실습 : 도서관 프로그램 (0) | 2023.07.30 |
---|---|
클래스, 인터페이스, 객체지향설계원칙 SOLID (0) | 2023.07.30 |
실습 : 별다방 프로젝트 (0) | 2023.07.30 |
타입,유틸리티 타입 (0) | 2023.07.29 |
실습: JS라이브러리를 TS 프로젝트에서 사용하기 <성적표 프로그램> (0) | 2023.07.27 |