React实现ToDoList

这篇博客展示了如何使用React构建一个交互式的待办事项管理应用。用户可以输入新的待办事项,点击添加按钮将其保存到列表中,通过搜索功能过滤特定任务,还可以编辑、删除、全选和取消选中任务。应用包含状态管理、事件处理和UI组件的交互逻辑。
摘要由CSDN通过智能技术生成

需要搭建react脚手架,放在src的index.js中

import { Component } from  'react'
import ReactDOM from 'react-dom'

class  Tick extends Component {
    state = {
        val: '',
        arr: [],
        title: 'tiDo',
        res: [],
        flage: false
    }
    render() {
        return (
            <div>
                <input type="text" onChange={ this.change } value={ this.state.val }/>
                <button onClick={ this.show }>添加</button>
                <button onClick={ () => this.sever(this.state.title, this.state.val) }>搜索</button>
                <ul>
                    { this.state.arr.map((item,index) => {
                        return (
                            <li key={ index }>
                                { item.flag ? <span onClick={ () => { this.get(index) } }><input type="checkbox" checked={ item.textFlage } onChange={ (event)=>this.checks(event,index) }/>{ item.tiDo }</span> : <input type="text" defaultValue={ item.tiDo } onKeyDown={ (event)=>this.text(event,index) }/>  }
                                <button onClick={ () => { this.del(index) } }></button>
                            </li>
                        )
                    }) }
                </ul>
                <div>
                    <input type="checkbox" checked={ this.state.flage } onChange={ (event)=>this.check(event) }/>全选
                </div>

                <h3>搜索结果</h3>
                <ul>
                    { this.state.res.map((itme, index) => {
                        return <li key={ index }>{ itme.tiDo }</li>
                    }) }
                </ul>
            </div>
        )
    }
    checks = (e,i) => {
        let info = this.state.arr
        info[i].textFlage = !info[i].textFlage
        this.setState({
            arr: info
        },() => {
            let flags = this.state.arr.every(itme => itme.textFlage)
            this.setState({
                flage: flags
            })
        })
    }
    check = (e) => {
        this.setState({
            flage:e.target.checked
        },() => {
            let info = [...this.state.arr]
            info.map(itme => itme.textFlage = this.state.flage)
            this.setState({
                arr: info
            })
        })

    }
    sever = (key,val) => {
        console.log(this.state.val)
        let info = this.state.arr
        let res = info.filter((itme, index, arr) => itme[key].includes(val))
        this.setState({
            res
        })
    }
    text = (e,i) => {
        if (e.keyCode === 13) {
            let  info = this.state.arr
            info[i].tiDo = e.target.value
            info[i].flag = !info[i].flag
            this.setState({
                arr: info
            })
        }
    }
    get = (i) => {
        let  info = this.state.arr
        info[i].flag = ! info[i].flag
        this.setState({
            arr: info
        })
    }
    del = (i) => {
        let info = this.state.arr
        info.splice(i,1)
        this.setState({
            arr: info
        })
    }
    change = (e) => {
        this.setState({
            val: e.target.value
        } )
    }
    show = () => {
        let arrs = [...this.state.arr]
        arrs.push({
            tiDo: this.state.val,
            flag: true,
            textFlage:false
        })
        this.setState({
            arr: arrs
        })
        this.setState({
            val: ''
        } )
    }
}

ReactDOM.render(<Tick/>,document.getElementById('root'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值