코딩 공부/React.js 리액트
[5주차 - 1] 투두리스트 UI 구현
recordmastd
2024. 11. 12. 18:06
- 날짜, 검색, 리스트 피드 추가 및 삭제 등의 기능을 구현
초기 설정
- npm create vite@latest, npm i, npm run dev 순서로 터미널
- 쓸데없는 파일 삭제, css 파일 코드 전체 삭제, App.jsx 일부 제외하고 다 삭제
- 각자의 섹션을 컴포넌트로 나눠서 만들어준다
(상단부터 헤더 컴포넌트, 에디터 컴포넌트, 리스트 컴포넌트)
App.css
.App{
width: 500px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 10px;
}
- app요소의 스타일을 display로 flex로 설정한다
flex: 유연하게 요소들의 배치를 조절 가능
column: 요소를 세로로 정리
gap: 요소들의 간격 조절
Header.jsx
const Header = () => {
return <div className="Header">
<h3>오늘은 📅</h3>
<h1>{new Date().toDateString()}</h1>
</div>;
};
- newDate객체 생성 후 toDateString 메서드로 문자열로 렌더링(객체 렌더링 시도 시 오류 발생)
Editior.css
.Editor {
display: flex;
gap: 10px;
}
.Editor input{
flex: 1;
padding: 15px;
border: 1px solid rgb(220, 220, 220);
border-radius: 5px;
}
/*버튼에 마우스 올리면 커서가 포인터로 변환*/
.Editor button{
cursor: pointer;
width: 80px;
border: none;
background-color: rgb(37, 147, 255);
color: white;
border-radius: 5px;
}
- felx값을 1로 하면 부모 요소를 벗어나지 않는 선에서 최대로 늘어남
- solid로 테두리 설정
- radius 속성은 5픽셀만큼 둥글게 설정
List
import "./List.css"
import TodoItem from "./TodoItem";
const List = () => {
return (
<div className="List">
<h4>Todo List</h4>
<input placeholder="검색어를 입력하세요"/>
<div className="todo_wrapper">
<TodoItem />
<TodoItem />
<TodoItem />
</div>
</div>
);
};
export default List;
.List > input {
width: 100%;
border: none;
border-bottom: 1px solid rgb(220, 220, 220);
padding: 15px 0px;
}
.List > input:focus{
outline: none;
border-bottom: 1px solid rgb(37, 147, 255) ;
}
- width를 100%러 설정해서 서치바를 화면에 가득 채운다
- 위아래 방향에만 여백을 주기 위해 padding을 15px 0px로 설정한다
.List .todos_wrapper {
display: flex;
flex-direction: column;
gap: 20px;
}
TodoItem 추가
import "./TodoItem.css";
const TodoItem = () => {
return (
<div>
<input type="checkbox" />
<div className="content">Todo...</div>
<div className="date">Date</div>
<button>삭제</button>
</div>
);
};
export default TodoItem;
.TodoItem {
display: flex;
align-items: center;
gap: 20px;
padding-bottom: 20px;
border-bottom: 1px solid rgb(240, 240, 240);
}
/*각각의 체크박스, 투두, 날짜, 삭제 버튼의 스타일 설정*/
.TodoItem input {
width: 20px;
}
.TodoItem .content {
flex: 1;
}
.TodoItem .date {
font-size: 14px;
color: gray;
}
.TodoItem button {
cursor: pointer;
color: gray;
font-size: 14px;
border: none;
border-radius: 5px;
padding: 5px;
}
- flex로 설정하여 요소를 가로로 배치
- 열을 가운데 기준으로 정렬하기 위해 alignItems를 center로 설정