1.效果图:

2.项目源码

3.源码

TodoList.js

import React, { Component, Fragment } from 'react';

import TodoItem from './TodoItem'

import './style.css'

//定义一个React组件
class TodoList extends Component { constructor(props) {
super(props);
this.state = {
list: [],
inputValue: '',
} this.handleInputChange = this.handleInputChange.bind(this);
this.handleBtnClick = this.handleBtnClick.bind(this);
this.handleDelete = this.handleDelete.bind(this);
} handleBtnClick() {
if (this.state.inputValue == '') {
alert("请输入代办项内容");
return;
}
this.setState({
list: [...this.state.list, this.state.inputValue],
inputValue: '',
});
} handleInputChange(e) {
this.setState({
inputValue: e.target.value
});
//console.log(e.target.value)
} handleDelete(index) {
const list = [...this.state.list];
list.splice(index, 1);
this.setState({
list: list
})
} getTodoItems() {
return (
this.state.list.map((item, index) => {
return (
<TodoItem
delete={this.handleDelete}
key={index}
content={item}
index={index}
/>)
})
)
} render() {
return (
<div className='w'>
<div className="header">
<div className="header-content">
<span className='logo'>ToDoList</span>
<div className="addItem">
<input placeholder="添加ToDo" value={this.state.inputValue} onChange={this.handleInputChange} />
<button onClick={this.handleBtnClick}>add</button>
</div>
</div>
</div>
<ul className="main">
<div className="main-header">
<span>正在进行</span>
</div>
<div className="main-content">
{this.getTodoItems()}
</div>
<div className="main-header">
<span>已经完成</span>
</div>
</ul>
<div className="footer">
<span>Created by Elylic @2020-9 todolist.cn</span>
</div>
</div>
);
}
} //导出组件
export default TodoList;

TodoItem.js

import React ,{Component} from 'react'
import './item.css' class TodoItem extends Component{ constructor(props){
super(props);
this.handleDelete = this.handleDelete.bind(this)
} handleDelete(){
this.props.delete(this.props.index);
} render(){
const {content } = this.props;
return (
<div>
<p className="todo-item"><input type="checkbox"/>{content}
<button className="todo-delete" onClick={this.handleDelete}>delete</button>
</p>
</div>
)
}
} export default TodoItem;

index.js

/**
* 整个项目的入口文件
*/
//引入React库,理解语法
import React from 'react';
//引入ReactDom让我们可以将一个组件挂载到DOM组件
import ReactDOM from 'react-dom';
//App组件,大写字母开头
import TodoList from './TodoList'; //将组件渲染到页面上
ReactDOM.render(<TodoList />,document.getElementById('root'));

style.css

.w{
width: 100%;
background-color: #c7c6c7;
padding: 0;
margin: 0;
} /*头部*/
.header{
width: 100%px;
height: 50px;
margin: 0 auto;
background-color:#2D2c2D
}
.header-content{
width: 500px;
margin: 0 auto;
}
.logo{
display: inline-block;
float: left;
color: #D9D4D4;
font-size: 26px;
font-weight: bold;
line-height: 20px;
padding-top: 15px;
} .addItem{
float: right;
margin-left: 100px;
padding-top: 15px;
} .addItem input{
display: inline-block;
width: 200px;
height: 20px;
border-radius: 5px;
padding: 0px 10px;
font-size: 12px;
}
.addItem button{
background: #ffffff;
color:#2D2c2D;
border-radius: 5px;
} /*主体内容*/
.main{
width: 500px;
padding:0;
margin: 0 auto;
background-color: #c7c6c7;
} .main-header span{
display: inline-block;
font-size: 20px;
font-weight: bold;
margin: 20px 0;
} /*底部区域*/
.footer{
width: 300px;
padding:0;
margin: 0 auto;
text-align: center;
font-size: 12px;
color:#78777A;
background-color: #c7c6c7;
padding-bottom: 12px;
}

item.css

.todo-item{
display: block;
width: 480px;
background-color: #ffffff;
border-radius: 3px;
padding: 5px 10px;
font-size: 16px;
margin: 5px 0h;
} .todo-item input{
float: left;
margin-right: 10px;
} .todo-delete{
float: right;
color:#2D2c2D;
}

更多参考链接:https://blog.csdn.net/sinat_38368658/article/details/108732416

使用React实现一个TodoList案例的更多相关文章

  1. 一个简单的 react 实例: < TodoList >

    <  react     TodoList:  > 组件: //引入React : import React from 'react'; //组件 class TodoList exten ...

  2. vue - Vue脚手架/TodoList案例

    今天做了一个案例,可以好好做做能够将之前的内容结合起来,最主要的是能对组件化编码流程有一个大概的清晰认知,这一套做下来,明天自己再做一遍复习一下,其实组件化流程倒是基本上没什么问题了,主要是很多vue ...

  3. 用vuejs实现一个todolist项目

    用vue.js实现一个todolist项目:input输入框输入的值会呈现在下方,并且会保存在localStorage里面,而且下方的列表点击之后也会有变化: 完整代码: App.vue <te ...

  4. 基于angular写的一个todolist

    对于新手来说,使用angularjs写一个todolist可以快速入门

  5. 第一个struts案例及分析

    软件中的框架,是一种半成品: 我们项目开发需要在框架的基础上进行!因为框架已经实现了一些功能,这样就可以提高开发效率! Struts2 = struts1  +  xwork (struts是基于MV ...

  6. 2-3 用组件改写Todolist案例

     编写组件来改写2-2的Todolist案例

  7. ​ 用一个开发案例详解Oracle临时表

    ​ 用一个开发案例详解Oracle临时表 2016-11-14 bisal ITPUB  一.开发需求  最近有一个开发需求,大致需要先使用主表,或主表和几张子表关联查询出ID(主键)及一些主表字段 ...

  8. 用react编写一个hello world

    我要分享的是用react搭建一个简单的hello world, 一个小demo, 大神请略过 首先看一下目录结构 创建一个目录, 用于存放demo mkdir reactHello cd reactH ...

  9. 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>

    Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ...

随机推荐

  1. linux下更改文件字符格式为uft-8

    liunx下发布的.net Core 程序,发现短信签名不错误不能发出.后来检查发现配配文件中的字符为乱码才知道是因为字符格式问题. 因为服务器批较多,还是使用命令来解决比较快.使用iconv来更改. ...

  2. ubuntu目录结构

    /:根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中 /bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls. ...

  3. OSPF协议原理及配置3-邻居关系的建立

    OSPF协议原理及配置3-邻居关系的建立   OSPF协议的邻居关系是通过交换Hello报文建立的,所以我们先对OSPF的报文的种类,及Hello报文的结构做一了解. 1 OSPF协议有5种协议报文( ...

  4. Python入门随记(1)

    1.IDE Interactive Development Enironment,交互式开发环境 2.AI artificial intelligence 3.Python是一种格式严明(严格缩进)的 ...

  5. LintCode 练习题

    /** * 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输 ...

  6. WPF 布局之综合实例

    WPF 布局之综合实例 <Window x:Class="UniFormGridDemo.MainWindow" xmlns="http://schemas.mic ...

  7. CentOS7 MySql数据库安装配置(单实例)

    一. 安装mysql-server 官网下载安装 # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # ...

  8. C# 杂七杂八知识点

    本文源自在工作过程中一些比较容易混淆或者理解不太清晰的知识点进行整理备忘. sealed修饰符 当sealed关键字修饰类,该类不能被继承. 当sealed关键字修饰方法的时候,该方法不能在其子类中重 ...

  9. Apache HTTPD 未知后缀解析漏洞

    环境搭建 https://blog.csdn.net/qq_36374896/article/details/84102101 该环境版本: PHP 7.x 最新版 Apache HTTPD 2.4. ...

  10. idea使用技巧、心得1

    0.安装idea之后的准备 (1) 永久快乐使用:在我的博客搜索安装idea关键词既可 (2) 取消更新: (3) idea 官网的关于idea的使用手册:https://www.jetbrains. ...