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. tp6微信公众号开发者模式自定义菜单

    1,参考上篇博客,获取access_token https://www.cnblogs.com/xiaoyantongxue/p/15803334.html 2:控制器写以下代码 /* * 获取普通a ...

  2. Lua中如何实现类似gdb的断点调试—08支持通过包名称添加断点

    在前一篇中我们支持了通过函数名称来添加断点,我们同时也提到了在Lua中一个函数的名称的并不是确定的.准确的说,Lua中的函数并没有名称,所谓名称其实是保存这个函数值的变量的名称. 于是通过函数名称添加 ...

  3. centos7 安装 nginx-1.18.0 并设置开机自启动

    一.到官网下载nginx Mainline  version:  nginx主力版本,为开发版 Stable version: 稳定版,在生产环境中选择此版本进行安装 Legacy versions: ...

  4. 新的ASP.NET Core 迁移指南

    最近在微信里做了一个调查: Web Forms应用程序升级到.NET 6, 收到550份调查,调查还在继续,欢迎参与调查.可以访问链接:https://wj.qq.com/s2/9822949/ac3 ...

  5. vue3 区别于 vue2 的“与众不同”

    希望本篇文章能帮你加深对 Vue 的理解,能信誓旦旦地说自己熟练Vue2/3.除此之外,也希望路过的朋友可以帮助我查漏补缺.   区别 生命周期的变化 整体来看,变化不大,只是名字大部分需要 + on ...

  6. Fiddler抓包常用功能

    通过上一篇文章Fiddler移动端抓包,我们知道了Fiddler抓包原理以及怎样进行移动端抓包,接下来介绍Fiddler中常用的功能. Fiddler中常用的功能如下: 停止抓包 清空会话窗内容 过滤 ...

  7. 不带头结点的单链表(基于c语言)

    本篇文章的代码大多使用无头结点的单链表: 相关定义: #include <stdio.h> #include <stdlib.h> #include <assert.h& ...

  8. ActiveMQ 笔记—01

  9. Django之 rest_framework (一基本组件)

    目录 RESTFUL 序列化 视图三部曲 认证与权限组件 解析器 分页 RESTFUL 一.什么是RESTFUL REST与技术无关代表的是一种软件架构风格,REST是Representational ...

  10. vue学习过程总结(02)- 网上开源项目vue-element-admin的启动

    1.功能丰富的项目:https://github.com/PanJiaChen/vue-element-admin.git 因为我配置的时候,遇到许多的问题,用了一天半才启动的,所以安着他文档一步一步 ...