我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用react实现todolist

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用react实现todolist

这篇文章主要介绍了怎么使用react实现todolist的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用react实现todolist文章都会有所收获,下面我们一起来看看吧。

使用react实现todolist的方法:1、新建一个项目文件夹Code;2、通过“create-react-app todo-list”命令创建react项目;3、在components文件夹下新建ToDoList.jsx文件;4、使用一个数组来保存数据,数组中每个元素为一个对象;5、编写页面布局;6、添加键盘事件,监听输入变化,实现待办事项和已办事项即可。

一、实例展示和功能介绍

1.1 实例展示

怎么使用react实现todolist

1.2 功能介绍

  • 添加待办事项,按enter键确定,同时清空输入框;

  • 通过checkbox是否勾选可以切换待办和已办事项;

  • 点击删除可以删除事项

二、准备工作

2.1 环境配置提醒

准备之前:本文假定开发环境已配置完成,包括:

  • Node.js已安装;

  • cnpm 已安装; npm install -g cnpm --registry=https://registry.npm.taobao.org

  • 脚手架工具已安装; npm install -g create-react-app / cnpm install -g create-react-app

2.2 新建React项目

1.新建一个项目文件夹Code,使用VSCode,将Code文件加添加到工作区;

怎么使用react实现todolist

图2.1

2.右击Code文件夹,在选项卡中选择在终端中打开;

怎么使用react实现todolist

图2.2

3.在终端中输入如下命令,新建React项目: create-react-app todo-list

怎么使用react实现todolist

图2.3

4.生成Rreact项目如下 :

怎么使用react实现todolist

图2.4

React开发主要是对class="lazy" data-src里的文件动手脚,node_modules主要防止各种依赖包,public放置一些公共文件,package.json这些是一些配置文件,在此不详述。

2.3 文件分类

  • 在class="lazy" data-src目录下新建components文件夹,用来放置自己创建的组件;

  • 在class="lazy" data-src目录下新建assets文件加用来防止css文件和图片文件等静态资源;

如图2.5所示:

怎么使用react实现todolist

图2.5

三、实现过程

3.1 创建组件ToDoList

components文件夹下新建ToDoList.jsx文件,编写如下代码,搭好一个组件的基本框架;代码如下:

//导入React相关依赖
import React from 'react';

//创建一个组件
class ToDoList extends React.Component{
   //构造函数
   constructor(props){
       super(props);
       //this是父组件(类)的一个实例,实例就类似于java里的一个类,创建了这个类型的一个对象,这个对象就是实例
       this.state = {
           //this.state里可以写一些初始化的数据
       }
   }


   //render渲染虚拟DOM
   render(){

       return(
           <div>
               ToDoList
           </div>
       );
   }

}


//输出组件,使得该组件可以被其他组件调用
export default ToDoList;

undefined

  • import导入的依赖;

  • 组件(class XXX extends React,Component);

  • 构造函数constructor;

  • render函数;

  • export输出组件;

3.2 功能实现与解析

1.初始化数据

使用一个数组来保存数据,数组中每个元素为一个对象,该对象包括两个字段:title和checked,tile为字符串类型,checked为布尔类型,用来区分待办(false)已办(true);

 list:[
               {
                   title:'吃饭',
                   checked:true
               },
               {
                   title:'跑步',
                   checked:false
               },
               {
                   title:'上班',
                   checked:false
               },
               {
                   title:'睡觉',
                   checked:true
               },
      ]

该数组在this.state中初始化:

 constructor(props){
       super(props);
       //this是父组件(类)的一个实例,实例就类似于java里的一个类,创建了这个类型的一个对象,这个对象就是实例
       this.state = {
           //this.state里可以写一些初始化的数据
           list:[
               {
                   title:'吃饭',
                   checked:true
               },
               {
                   title:'跑步',
                   checked:false
               },
               {
                   title:'上班',
                   checked:false
               },
               {
                   title:'睡觉',
                   checked:true
               },
           ],
       }
   }

2.编写页面布局

页面分为顶部的输入框(input)和下面的 待办事项列表 已办事项列表;在render中的return中编写(jsx);

    render(){

       return(
           <div>
                <header>TodoList:  <input type = "text"/> </header>

               <h3>待办事项</h3>

               <hr />
               
               <ul>
                   {}
                   <li>
                       <input type="checkbox" /> -- <button>删除</button>
                   </li>
               </ul>          



               <h3>已完成事项</h3>

               <hr />
               <ul>
                   {}
                   <li>
                       <input type="checkbox"  /> -- <button>删除</button>
                   </li>
               </ul>    
           </div>
       );
   }

3.挂载到根节点下

在index.js下,引入ToDoList组件

import ToDoList from './components/ToDoList';

然后挂在组件ToDoList

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import ToDoList from './components/ToDoList';

ReactDOM.render(
 <React.StrictMode>
   {}
   <ToDoList />  
 </React.StrictMode>,
 document.getElementById('root')
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

简陋渲染效果如下:

怎么使用react实现todolist

图3.1

3.功能实现

  • 添加待办事项

(1)使用ref属性,获取input输入值:

  在input标签上设置属性ref="inputToDo",然后在方法中可以通过 this.refs.inputToDo.value获取输入值;

(2)添加键盘事件,监听输入变化,当输入enter时,添加待办事项;

  使用onKeyUp(键盘弹起)/onKeyDown(键盘按下)事件来监听键盘变化。当键盘变化后,触发添加函数,将输入值添加到待办事项中;代码如下:

jsx:

<header>TodoList:  <input type = "text" ref = "inputToDo" onKeyUp = {this.addToDo}/> </header>

addToDo函数:

    addToDo = (event) => {
       console.log(event.keyCode);
       if(event.keyCode === 13)
       {
           let tempList = this.state.list;
           tempList.push({
               title:this.refs.inputToDo.value,
               checked:false,
           });
           this.setState({
               list:tempList,
           });
           this.refs.inputToDo.value = '';
       }
   }

(3)在constructor中使用bind绑定addToDo,这一步是必须的,否则方法不能执行,所有的方法都需要像这样绑定;

 this.addToDo = this.addToDo.bind(this);

怎么使用react实现todolist

图3.2

效果:

 怎么使用react实现todolist

视频3.1

  • 输出待办事项和已办事项

  使用map方法,循环遍历数组,输出每组数据;代码如下:

 <ul>
                   {}
                   {
                       this.state.list.map((value,index)=>{
                {}
                           if(!value.checked)
                           {
                               return (
                                   <li>
                         {}
                                       <input key = {index} type="checkbox" checked = {value.checked} onChange={this.checkboxChange.bind(this,index)}/> {value.title}-- <button>删除</button>
                                   </li>
                               );
                           }

                       })
                   }
</ul>

checked = {value.checked}表示复选框是否打勾,onChange事件触发一个改变事项状态的方法,index是数组的索引,该方法在下文实现;

  效果:

怎么使用react实现todolist

图3.3

  • 待办和已办互相转换

  这一步的思路也很简单,其实就是在触发checkboxonChange事件时,将某一个事项的checked值变为相反的值(true->false/false->true),所以onChange后的方法需要传入数组的索引值,具体实现代码如下:

jsx

<input key = {index} type="checkbox" checked = {value.checked} onChange={this.checkboxChange.bind(this,index)}/> {value.title}-- <button>删除</button>

checkboxChange

checkboxChange = (index) => {
     let tempList = this.state.list;
     tempList[index].checked = !tempList[index].checked;
     this.setState({
         list:tempList,
    });
}

效果:

怎么使用react实现todolist

 视频3.2

  • 删除事项

删除事项比较简单了,思路也是类似的,在button上添加onClick按钮,触发删除事件,传入参数index,然后根据index,使用数组的splice函数,删除某一待办事项。

arrayA.splice(index,n)

该方法第一个参数是数组中的元素位置,第二个参数是从index开始删除多少个元素。

具体实现如下:

jsx

  <li>
      <input key = {index} type="checkbox" checked = {value.checked} onChange={this.checkboxChange.bind(this,index)}/> {value.title}
      -- <button onClick={this.removeToDo.bind(this,index)}>删除</button>

</li>

removeToDo

    removeToDo = (index) => {
       let tempList = this.state.list;
       tempList.splice(index,1);
       this.setState({
           list:tempList,
       });
   }

效果:即为开篇展示的效果

3.3 编写样式

样式随便写了一下,不太好看,这里也把代码丢上来吧;

index.css

.list{

 padding: 10px;
}

.list li{

 line-height: 40px;
 margin-left: 30px;
}

.title{

 height: 44px;

 line-height: 44px;

 text-align: center;

 background: #000;

 color:#fff;
}

.title input{

 height: 40px;
}


.container{
 width: 800px;
 height: 1000px;
 margin-left: auto;
 margin-right: auto;
 background-color:  #D0D0D0;
 border: #fff solid 1px;
 border-radius: 5px;
}

.container h3{
 margin-left: 20px;
}

.del-btn {
 float: right;
 margin-right: 30px;
}
  • 引入样式

  在ToDoList.jsx中按如下代码引入index.css

import '../assets/index.css';

3.4 整体效果

怎么使用react实现todolist

四、整体代码

  • ToDoList.jsx

//导入React相关依赖
import React from 'react';
import '../assets/index.css';

//创建一个组件
class ToDoList extends React.Component{
   //构造函数
   constructor(props){
       super(props);
       //this是父组件(类)的一个实例,实例就类似于java里的一个类,创建了这个类型的一个对象,这个对象就是实例
       this.state = {
           //this.state里可以写一些初始化的数据
           list:[
               {
                   title:'吃饭',
                   checked:true
               },
               {
                   title:'跑步',
                   checked:false
               },
               {
                   title:'上班',
                   checked:false
               },
               {
                   title:'睡觉',
                   checked:true
               },
           ],
       }

       this.addToDo = this.addToDo.bind(this);
       this.checkboxChange = this.checkboxChange.bind(this);
   }

   addToDo = (event) => {
       console.log(event.keyCode);
       if(event.keyCode === 13)
       {
           let tempList = this.state.list;
           tempList.push({
               title:this.refs.inputToDo.value,
               checked:false,
           });
           this.setState({
               list:tempList,
           });
           this.refs.inputToDo.value = '';
       }
   }


   checkboxChange = (index) => {
       let tempList = this.state.list;
       tempList[index].checked = !tempList[index].checked;
       this.setState({
           list:tempList,
       });
   }

   removeToDo = (index) => {
       let tempList = this.state.list;
       tempList.splice(index,1);
       this.setState({
           list:tempList,
       });
   }

   //render渲染虚拟DOM
   render(){

       return(
           <div>
                <header className = "title">TodoList:  <input type = "text" ref = "inputToDo" onKeyUp = {this.addToDo}/> </header>
                   <div className = "container">
                       <h3>待办事项</h3>

                       <hr />

                       <ul className = "list">
                           {}
                           {
                               this.state.list.map((value,index)=>{
                                   if(!value.checked)
                                   {
                                       return (
                                           <li>
                                               <input key = {index} type="checkbox" checked = {value.checked} onChange={this.checkboxChange.bind(this,index)}/> {value.title}
                                               <button onClick={this.removeToDo.bind(this,index)} className = "del-btn">删除</button>
                                           </li>
                                       );
                                   }

                               })
                           }
                       
                       </ul>          
                       <h3>已完成事项</h3>

                       <hr />
                       <ul className = "list">
                           {}
                           {
                               this.state.list.map((value,index)=>{
                                   if(value.checked)
                                   {
                                       return (
                                           <li>
                                               <input key = {index} type="checkbox" checked = {value.checked} onChange={this.checkboxChange.bind(this,index)}/> {value.title}
                                               <button onClick={this.removeToDo.bind(this,index)} className = "del-btn">删除</button>
                                           </li>
                                       );
                                   }
                               })
                           }
                       </ul>    
                </div>              
           </div>
       );
   }

}


//输出组件,使得该组件可以被其他组件调用
export default ToDoList;

View Code

  • index.css 

.red{

 color:red;
}


.list{

 padding: 10px;
}

.list li{

 line-height: 40px;
 margin-left: 30px;
}

.title{

 height: 44px;

 line-height: 44px;

 text-align: center;

 background: #000;

 color:#fff;
}

.title input{

 height: 40px;
}


.container{
 width: 800px;
 height: 1000px;
 margin-left: auto;
 margin-right: auto;
 background-color:  #D0D0D0;
 border: #fff solid 1px;
 border-radius: 5px;
}

.container h3{
 margin-left: 20px;
}

.del-btn {
 float: right;
 margin-right: 30px;
}
  • index.js 

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import ToDoList from './components/ToDoList';

ReactDOM.render(
 <React.StrictMode>
   {}
   <ToDoList />
 </React.StrictMode>,
 document.getElementById('root')
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

关于“怎么使用react实现todolist”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用react实现todolist”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用react实现todolist

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用react实现todolist

这篇文章主要介绍了怎么使用react实现todolist的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用react实现todolist文章都会有所收获,下面我们一起来看看吧。使用react实现todoli
2023-07-04

如何使用react实现todolist

使用react实现todolist的方法:1、新建一个项目文件夹Code;2、通过“create-react-app todo-list”命令创建react项目;3、在components文件夹下新建ToDoList.jsx文件;4、使用一个数组来保存数据,数组中每个元素为一个对象;5、编写页面布局;6、添加键盘事件,监听输入变化,实现待办事项和已办事项即可。
2023-05-14

react如何实现todolist的增删改查

这期内容当中小编将会给大家带来有关react如何实现todolist的增删改查,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。以todolist为例目录如下app.js import React, { P
2023-06-22

.NET 6开发TodoList应用怎么实现

这篇文章主要介绍“.NET 6开发TodoList应用怎么实现”,在日常操作中,相信很多人在.NET 6开发TodoList应用怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.NET 6开发TodoL
2023-06-22

怎么使用react native reanimated实现动画

这篇“怎么使用react native reanimated实现动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用r
2023-07-05

怎么使用Framer Motion实现React动画

这篇文章主要介绍“怎么使用Framer Motion实现React动画”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Framer Motion实现React动画”文章能帮助大家解决问题。在我
2023-07-04

.NET 6开发TodoList应用怎么实现数据塑形

这篇文章主要介绍“.NET 6开发TodoList应用怎么实现数据塑形”,在日常操作中,相信很多人在.NET 6开发TodoList应用怎么实现数据塑形问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.NET
2023-06-22

使用react怎么实现一个Radio组件

使用react怎么实现一个Radio组件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。测试组件:class Test extends Component { constr
2023-06-14

怎么使用react实现一个tab组件

使用react实现一个tab组件的方法:1、通过“export default props => {...}”方式创建TAB button组件;2、通过“tab-group-layout.js”组件来传“tabIndex”,并设置默认选中的tab效果;3、用react继承“react.component”组件里的onMouseOver和OnMouseOut方法即可。
2022-11-22

.NET 6开发TodoList应用怎么实现查询排序

这篇文章主要讲解了“.NET 6开发TodoList应用怎么实现查询排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET 6开发TodoList应用怎么实现查询排序”吧!需求关于查询的
2023-06-22

使用React怎么实现一个登录表单

这篇文章将为大家详细讲解有关使用React怎么实现一个登录表单,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:import React from react;import { Inp
2023-06-14

怎么用react实现引导页

用react实现引导页的方法:1、创建一个启动界面,代码如“import React, { Component } from 'react';import{AppRegistry,StyleSheet,Text,View,AsyncStorage...}”;2、判断每次启动,获取之前是否保存过第一次加载的属性,如果加载过就显示主页,没加载过就显示引导页。
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录