React制作简单的Todolist

Todolist

以下代码直接粘贴到React项目环境下即可使用

import {render} from "react-dom";
import React,{Component,createRef,forwardRef} from 'react'

// CURD
//DOTOLIST
//受控

class ToDoList extends Component {

  state = {
    title:'留言板',
    nikename:'雪雪',
    message:'所爱隔山海,山海皆可平',
    list:[
      // {id:1,nikename:'老王',message:'在么'},
      // {id:2,nikename:'你那谁',message:'直接说事,我好知道我在不在'},
    ],
    hasMessage:false,
    searchList:[],

    searchIpt:'的',
    searchKey:'message',
  };

  changeIpt = e => this.setState({[e.target.name]:e.target.value});

  add=()=>{
    alert(1)
    let {list,nikename,message} = this.state;

    this.setState({
      list:[...list,{id:list.length+1,nikename,message}],
      nikename:'',
      message:''
    })

  };

  del=(index,id)=>{
    this.state.list.splice(index, 1); //model 变化了,views层没有变化的
    this.setState({list:this.state.list})
  };

  clear = () => this.setState({list:[]})

  check=(index,id,key,value)=>{
    let tmpArr = [...this.state.list];
    tmpArr[index][key]=value;
    this.setState({list:tmpArr})
  };

  search=(key,content)=>{
    let result = this.state.list.filter((item,index,arr)=>item[key].includes(content));
    this.setState({searchList:result})
  };

  // search=(key,content)=>this.state.list.filter((item,index,arr)=>item[key].includes(content))

  render() {

    let {title,nikename,message,list,searchIpt,searchList} = this.state;

    return (

      <div>
        <h3>{title}</h3>

        <input type="text" name="nikename" value={nikename} onChange={this.changeIpt}/>

        <br/>

        <textarea type="text" name="message" value={message} onChange={this.changeIpt}></textarea>

        <br/>

        <button onClick={this.add}></button>

        <br/>

        <ul>
          {
            list.map((item,index)=>(
              <li key={item.id}>
                <span>{item.message}</span>
                --
                <i>{item.nikename}</i>
                <button onClick={this.del.bind(null,index,item.id)}></button>
                <button onClick={()=>this.check(index,item.id,'message','当我没说')}></button>
              </li>
            ))
          }
        </ul>

        <br/>

        <button onClick={this.clear}>清空</button>


        <hr/>

        <input type="text" name="searchIpt" value={searchIpt} onChange={this.changeIpt}/>
        <button onClick={()=>this.search(this.state.searchKey,this.state.searchIpt)}></button>


        <ol>
          {
            searchList.map((item,index)=>(
              <li key={item.id}>
                <span>{item.message}</span>
                --
                <i>{item.nikename}</i>
              </li>
            ))
          }
        </ol>


      </div>
    )
  }

}

render(
  <ToDoList/>,
  document.querySelector('#root'),
  () => console.log('render voer')
);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值