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. 矩池云上使用Visdom可视化图像说明

    租用机器添加默认端口 点击展开高级选项 点击添加端口配置 添加Visdom默认端口,选择 http 端口填入 8097 进入环境安装并使用 JupyterLab 链接 是本次实验用来安装实验的工具 H ...

  2. HarmonyOS小白入门设备开发的“芯”路历程

    HarmonyOS Connect设备开发,相信不少刚入门的开发者都被这些问题所困扰,面对五花八门的开发板不知道该怎么选取?芯片.模组.开发板傻傻分不清?如何使用代码控制开发板? 本期,我们将一一为你 ...

  3. Spring-MyBatis的配置文件

    <?xml version="1.0" encoding="UTF8"?> <beans xmlns="http://www.spr ...

  4. ArcGIS温泉数据聚类分析、核密度分析

    这期博主给大家介绍下ArcGIS中的Riple's K 函数.与Kernel核密度分析. 首先从百度获取了湖南省的温泉数据.如图: 湖南省温泉数据 1.数据处理 (1)复制粘贴x.y坐标. (2)用快 ...

  5. DHCP协议简析

    推荐这篇文章,原理及抓包都分析的很好: **推荐这篇文章,原理及抓包都分析的很好:** https://blog.csdn.net/andy_93/article/details/78238931 简 ...

  6. logging 日志配用

    第一步,创建一个logger: 第二步,创建一个handler,用于写入日志文件: 第三步,再创建一个handler,用于输出到控制台: 第四步,定义handler的输出格式: 第五步,将logger ...

  7. python+pytest接口自动化(10)-session会话保持

    在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢? 上一篇文章我们介绍了Cookie绕过登录,其实这就是保持登录状态的方法之一. 另外一种方式则是通过 ...

  8. php的魔术函数和魔术常量

    0x00 魔术函数 1. __construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2. __des ...

  9. IC设计学习路线

    一 前言 一直以来都是这也想学那也想学,搞个两三个月又放弃了,开始搞新的,从来没有任何东西超过一年,更不要说坚持三年.现在经历的事情多了,学过各种编程语言明白了要想学会一个专业技能,至少是三年.得到软 ...

  10. Python的类和继承

    一.类的封装: 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问 class Boss(): # 类的公共属性 level=1 # 类的初始 ...