ToDoList 增删改查

ToDoList
主要功能
增加数据
删除数据
修改数据
查询数据渲染页面

1 . HTML页面

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Web site created using create-react-app" />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
    <title>React App</title>
    <style>
      *{margin:0;padding:0;}
      .btn{border:none;background:none;color:red;}
      .btn-color{color:green;}
      li{border-bottom:0.1px solid #000; list-style: none;}
      li:nth-child(even){
        background:pink;
      }
      li:nth-child(odd){
        background:skyblue;
      }
    </style>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
  </body>
</html>

2 . index.js 文件代码

import React from "react";
import ReactDOM from "react-dom";

class TodoList extends React.Component{
    //构造函数
    constructor(){
        //super()超级继承React
        super();
        //声明state状态名为myList的数组和myInput字符串
        this.state={
            myList:[],
            myInput:""
        }
    }
    //生命周期方法在渲染之前调用
    UNSAFE_componentWillMount(){
        // 获取本地数据赋值给myList
        var myList = window.localStorage.getItem("myList");
        //判断myList是否是空的
        if(myList === null || myList === ""){
            //如果myList是空的,就让它等一个空数组
            myList=[]
        }else{
            //如果myList不是空的,拿到的数据是字符串需要通过split进行转换成数组
            myList = myList.split(",")
        }
        //把转换过的数组赋值给this.setState名为myList
        this.setState({
            myList:myList
        })
        
    }
    //添加的点击事件
    handleAddClick(){
        //拿到input的值
        var val = this.refs.myInput.value;
        //把input的值清空
        this.refs.myInput.value=this.state.myInput;
        //添加数据到this.state的myList
        this.setState({
            myList:[...this.state.myList,val]
        },()=>{
            //修改本地数据
            window.localStorage.setItem("myList",this.state.myList)
        })
    }
    //删除的点击事件
    handleDeleteClick(index){
        //获取this.state的myList数组,赋值给arr
        var arr = this.state.myList;
        //删除index下标的数据,后边的1是删除一条
        arr.splice(index,1)
        //删除过后重新赋值给this.state的myList
        this.setState({
            myList:arr
        },()=>{
            //修改本地数据
            window.localStorage.setItem("myList",this.state.myList)
        })
    }
    //修改的点击事件
    handleUpdateClick(index){
        //获取this.state的myList数组,赋值给arr
        var arr =  this.state.myList;
        //同过prompt获取要修改的内容
        var str = prompt("请输入修改内容");
        //判断是不是确认修改
        if(str!=null){
            //在arr数组中找到下标index,设置修改个数为1,修改的内容为str
            arr.splice(index,1,str);
            //修改过后把this.state的myList数据修改成给改过的数据
            this.setState({
                myList:arr
            },()=>{
                //修改本地数据
                window.localStorage.setItem("myList",this.state.myList)
            })
        }
    }
    //绑定键盘事件
    keyDown(e){
        //判断键盘按下的数字码是不是enter
       if(e.keyCode === 13){
           //如果是enter的编码,执行添加的点击事件
           this.handleAddClick();
       }
    }
    //清空的点击事件
    handleClearClick(){
        //直接把this.state的myList赋值成为空数组
        this.setState({
            myList:[]
        },()=>{
            //修改本地数据
            window.localStorage.setItem("myList",this.state.myList)
        })
    }

    // 渲染
    render(){
        return(
            <React.Fragment>
            {/* input是搜索框 button第一个是添加 button第二个是清空 */}
                <input ref="myInput" onKeyDown={this.keyDown.bind(this)} type="text"/><button onClick={this.handleAddClick.bind(this)}>添加</button><button onClick={this.handleClearClick.bind(this)}>清空</button>
                <ul>
                    {/* 通过map循环遍历this.state的myList 渲染页面 给第一个button绑定删除事件 给第二个button修改事件 */}
                    {this.state.myList.map((m,index) => {return <li key={index}>{m} <button onClick={this.handleDeleteClick.bind(this,index)}>删除</button><button onClick={this.handleUpdateClick.bind(this,index)}>修改</button></li>})}
                </ul>
            </React.Fragment>
        );
    }
}
//获取目标元素渲染页面
ReactDOM.render(<TodoList />,document.querySelector("#root"))
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值