Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 밸류즈
- 달력 라이브러리
- MRC
- userManagement
- RCPS
- jsonwebtoken
- stock option
- Styled Components
- 회원가입로직
- react
- 마이페이지
- Typesciprt
- 파생상품평가
- 배포
- 빌드 및 배포
- 밸류즈 홈페이지
- 캘린더 라이브러리
- register
- 공통메서드
- 로그인
- 이미지 업로드
- Token
- Update
- 스프링시큐리티
- Ajax
- ui탬플릿
- 로그인 로직
- mypage
- 관리자페이지
- 인증처리
Archives
- Today
- Total
I T H
[React_Basic 2] TODO 리스트 만들기1 소스코드_클래스형 컴포넌트에서 함수형 컴포넌트로 바꿔보기 본문
[ 클래스형 컴포넌트 ]
- App.js
import React, { Component } from "react";
import "./App.css";
export default class App extends Component {
state = {
todoData: [],
value: "",
};
btnStyle = {
color: "#fff",
border: "none",
padding: "5px 9px",
borderRadius: "50%",
cursor: "pointer",
float: "right",
};
getStyle = (completed) => {
return {
padding: "10px",
borderBottom: "1px #ccc dotted",
textDecoration: completed ? "line-through" : "none",
};
};
handleClick = (id) => {
let newTodoData = this.state.todoData.filter((data) => data.id !== id); //클릭하지 않은 key값 데이터만 뜨게 됨.
console.log("newTodoData", newTodoData);
this.setState({ todoData: newTodoData });
};
handleChange = (e) => {
console.log("e", e.target.value);
this.setState({ value: e.target.value });
};
handleSubmit = (e) => {
//form 안에 input을 전송할때 페이지 리로드 되는 걸 막아줌
e.preventDefault();
//새로운 할일 데이터
let newTodo = {
id: Date.now(),
title: this.state.value,
completed: false,
};
//원래 있던 할 일에 새로운 할일 더해주기
this.setState({ todoData: [...this.state.todoData, newTodo], value: "" });
};
handleCompleteChange = (id) => {
let newTodoData = this.state.todoData.map((data) => {
if (data.id === id) {
data.completed = !data.completed;
}
return data;
});
this.setState({ todoData: newTodoData });
};
render() {
return (
<div className="container">
<div className="todoBlock">
<div className="title">
<h1>Today Plan</h1>
</div>
{this.state.todoData.map((data) => (
<div style={this.getStyle(data.completed)} key={data.id}>
<input
type="checkbox"
defaultChecked={false}
onChange={() => this.handleCompleteChange(data.id)}
/>
{data.title}
<button
style={this.btnStyle}
onClick={() => this.handleClick(data.id)}
>
X
</button>
</div>
))}
<form style={{ display: "flex" }} onSubmit={this.handleSubmit}>
<input
tpye="text"
name="value"
style={{ flex: "10", padding: "5px" }}
placeholder="오늘의 계획을 입력하세요.."
value={this.state.value}
onChange={this.handleChange}
/>
<input
type="submit"
value="입력"
calssName="btn"
style={{ flex: "1" }}
/>
</form>
</div>
</div>
);
}
}
[함수형 컴포넌트]
- App.js
import React from "react";
import "./App.css";
import { useState } from "react";
export default function App() {
const [todoData, setTodoData] = useState([]);
const [value, setValue] = useState("");
const btnStyle = {
color: "#fff",
border: "none",
padding: "5px 9px",
borderRadius: "50%",
cursor: "pointer",
float: "right",
};
const getStyle = (completed) => {
return {
padding: "10px",
borderBottom: "1px #ccc dotted",
textDecoration: completed ? "line-through" : "none",
};
};
const handleClick = (id) => {
let newTodoData = todoData.filter((data) => data.id !== id); //클릭하지 않은 key값 데이터만 뜨게 됨.
console.log("newTodoData", newTodoData);
setTodoData(newTodoData);
};
const handleChange = (e) => {
setValue(e.target.value);
};
const handleSubmit = (e) => {
//form 안에 input을 전송할때 페이지 리로드 되는 걸 막아줌
e.preventDefault();
//새로운 할일 데이터
let newTodo = {
id: Date.now(),
title: value,
completed: false,
};
//원래 있던 할 일에 새로운 할일 더해주기
setTodoData((prev) => [...prev, newTodo]);
setValue("");
};
const handleCompleteChange = (id) => {
let newTodoData = todoData.map((data) => {
if (data.id === id) {
data.completed = !data.completed;
}
return data;
});
setTodoData(newTodoData);
};
return (
<div className="container">
<div className="todoBlock">
<div className="title">
<h1>Today Plan</h1>
</div>
{todoData.map((data) => (
<div style={getStyle(data.completed)} key={data.id}>
<input
type="checkbox"
defaultChecked={false}
onChange={() => handleCompleteChange(data.id)}
/>
{data.title}
<button style={btnStyle} onClick={() => handleClick(data.id)}>
X
</button>
</div>
))}
<form style={{ display: "flex" }} onSubmit={handleSubmit}>
<input
tpye="text"
name="value"
style={{ flex: "10", padding: "5px" }}
placeholder="오늘의 계획을 입력하세요."
value={value}
onChange={handleChange}
/>
<input
type="submit"
value="입력"
calssName="btn"
style={{ flex: "1" }}
/>
</form>
</div>
</div>
);
}
[결과화면]
'React Basic' 카테고리의 다른 글
[React_Basic 6] TODO 리스트 만들기 5 - React.memo(렌더링최적화) (0) | 2024.01.25 |
---|---|
[React_Basic 5] TODO 리스트 만들기 4 - List, Lists컴포넌트 분리 (0) | 2024.01.25 |
[React_Basic 4] TODO 리스트 만들기3 - Drag and Drop (0) | 2024.01.25 |
[React_Basic 3] TODO 리스트 만들기2 - 컴포넌트분해/tailwindcss사용 (0) | 2024.01.25 |
[React_Basic 1] 기본환경설정 - Node.js설치/ VS Code설치/ 리액트 앱 설치 (1) | 2024.01.25 |