<!DOCTYPE html>
<html>
<head>
<title>Todo List</title>
</head>
<body>
<div id="container">
</div>
</body>
</html>
body {
padding : 50px;
background-color: #66CCFF;
font-family: sans-serif;
}
#container {
display: flex;
justify-content: center;
}
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
ReactDOM.render(
<div>
<p>Hello!</p>
</div>,
document.querySelector("#container")
);
import React, { Component } from "react";
class TodoList extends Component {
render() {
return (
<div className="todolistMain">
<div className="header">
<form>
<input type="text" placeholder="enter task" />
<button type="submit">add</button>
</form>
</div>
</div>
);
}
}
export default TodoList;
import React from "react";
import ReactDOM from "react-dom";
import TodoList from "./TodoList";
import "./index.css";
ReactDOM.render(
<div>
<TodoList />
</div>,
document.querySelector("#container")
);
import React, { Component } from "react";
class TodoList extends Component {
constructor(props) {
super(props);
this.state = {
items : []
};
this.addItem = this.addItem.bind(this);
}
addItem(e) {
}
render() {
return (
<div className="todolistMain">
<div className="header">
<form onSubmit={this.addItem}>
<input type="text" placeholder="enter task" />
<button type="submit">add</button>
</form>
</div>
</div>
);
}
}
export default TodoList;
import React, { Component } from "react";
class TodoList extends Component {
constructor(props) {
super(props);
this.state = {
items: [],
};
this.addItem = this.addItem.bind(this);
}
addItem(e) {
var itemArray = this.state.items;
if(this._inputElement.value !== "") {
itemArray.unshift({
text : this._inputElement.value,
key : Date.now()
});
this.setState({
items : itemArray
});
this._inputElement.value = "";
}
console.log(itemArray);
e.preventDefault();
}
render() {
return (
<div className="todolistMain">
<div className="header">
<form onSubmit={this.addItem}>
<input
ref={(a) => (this._inputElement = a)}
type="text"
placeholder="enter task"
/>
<button type="submit">add</button>
</form>
</div>
</div>
);
}
}
export default TodoList;
import React, { Component } from "react";
class TodoItems extends Component {
createTasks(item) {
return <li key={item.key}>{item.text}</li>;
}
render() {
var todoEntries = this.props.entries;
var listItems = todoEntries.map(this.createTasks);
return <ul className="theList">{listItems}</ul>;
}
}
export default TodoItems;
import React, { Component } from "react";
import TodoItems from "./TodoItems";
class TodoList extends Component {
constructor(props) {
super(props);
this.state = {
items: [],
};
this.addItem = this.addItem.bind(this);
}
addItem(e) {
var itemArray = this.state.items;
if (this._inputElement.value !== "") {
itemArray.unshift({
text: this._inputElement.value,
key: Date.now(),
});
this.setState({
items: itemArray,
});
this._inputElement.value = "";
}
console.log(itemArray);
e.preventDefault();
}
render() {
return (
<div className="todolistMain">
<div className="header">
<form onSubmit={this.addItem}>
<input
ref={(a) => (this._inputElement = a)}
type="text"
placeholder="enter task"
/>
<button type="submit">add</button>
</form>
</div>
<TodoItems entries={this.state.items} />
</div>
);
}
}
export default TodoList;
.todolistMain .header input {
padding: 10px;
font-size: 16px;
border: 2px solid #FFF;
width: 165px;
}
.todolistMain .header button {
padding: 10px;
font-size: 16px;
margin: 10px;
margin-right: 0px;
background-color: #0066FF;
color: #FFF;
border: 2px solid #0066FF;
}
.todolistMain .theList {
list-style: none;
padding-left: 0;
width: 250px;
}
.todolistMain .theList li {
color: #333;
background-color: rgba(255, 255, 255, .5);
padding: 15px;
margin-bottom: 15px;
border-radius: 5px;
}
아이템을 삭제를 할려면 items를 갖고 있는 ItemList의 state와 연결되어야 한다 이제 그 부분을 할 예정이다!
createTasks return에서 li태그에 onClick 이벤트를 추가한다
src / TodoList.js
import React, { Component } from "react";
import TodoItems from "./TodoItems";
import "./TodoList.css";
class TodoList extends Component {
constructor(props) {
super(props);
this.state = {
items: [],
};
this.addItem = this.addItem.bind(this);
this.deleteItem = this.deleteItem.bind(this);
}
addItem(e) {
var itemArray = this.state.items;
if (this._inputElement.value !== "") {
itemArray.unshift({
text: this._inputElement.value,
key: Date.now(),
});
this.setState({
items: itemArray,
});
this._inputElement.value = "";
}
e.preventDefault();
}
deleteItem(key) {
var filterItems = this.state.items.filter(function (item) {
return item.key !== key;
});
this.setState({
items: filterItems,
});
}
render() {
return (
<div className="todolistMain">
<div className="header">
<form onSubmit={this.addItem}>
<input
ref={(a) => (this._inputElement = a)}
type="text"
placeholder="enter task"
/>
<button type="submit">add</button>
</form>
</div>
<TodoItems entries={this.state.items} delete={this.deleteItem} />
</div>
);
}
}
export default TodoList;
import React, { Component } from "react";
class TodoItems extends Component {
constructor(props) {
super(props);
this.createTasks = this.createTasks.bind(this);
}
delete(key) {
this.props.delete(key);
}
createTasks(item) {
return (
<li onClick={() => this.delete(item.key)} key={item.key}>
{item.text}
</li>
);
}
render() {
var todoEntries = this.props.entries;
var listItems = todoEntries.map(this.createTasks);
return <ul className="theList">{listItems}</ul>;
}
}
export default TodoItems;
.todolistMain .header input {
padding: 10px;
font-size: 16px;
border: 2px solid #FFF;
width: 165px;
}
.todolistMain .header button {
padding: 10px;
font-size: 16px;
margin: 10px;
margin-right: 0px;
background-color: #0066FF;
color: #FFF;
border: 2px solid #0066FF;
}
.todolistMain .theList {
list-style: none;
padding-left: 0;
width: 250px;
}
.todolistMain .theList li {
color: #333;
background-color: rgba(255, 255, 255, .5);
padding: 15px;
margin-bottom: 15px;
border-radius: 5px;
transition: background-color .2s ease-out;
}
.todolistMain .theList li:hover {
background-color: pink;
cursor: pointer;
}
import React, { Component } from "react";
import FlipMove from "react-flip-move";
class TodoItems extends Component {
constructor(props) {
super(props);
this.createTasks = this.createTasks.bind(this);
}
delete(key) {
this.props.delete(key);
}
createTasks(item) {
return (
<li onClick={() => this.delete(item.key)} key={item.key}>
{item.text}
</li>
);
}
render() {
var todoEntries = this.props.entries;
var listItems = todoEntries.map(this.createTasks);
return (
<ul className="theList">
<FlipMove duration={250} easing="ease-out">
{listItems}
</FlipMove>
</ul>
);
}
}
export default TodoItems;