组件拆分详细代码(二)03——List列表组件-添加任务功能 & 删除和单选功能 & 全选按钮功能 & 编辑任务功能

组件化拆分——添加任务功能 & 删除和单选功能 & 全选按钮功能 & 编辑任务功能

src/views/List.js


import React from 'react'

class List extends React.Component {

  constructor (props) {
    super(props)
    this.state = {
      isAll: false
    }
  }

  handleDelete = (id) => {
    // 控制删除操作
    this.props.deleteTask(id)
  }

  handleCheck = (id) => {
    // 控制单选
    this.props.toggleItem(id)
  }

  toggleAll = () => {
    // 顶部全选按钮
    this.setState({
      isAll: !this.state.isAll
    }, () => {
      // 控制所有的列表的选中状态
      this.props.toggleAll(this.state.isAll)
    })
  }

  handleDoubleClick = (id, e) => {
    // 双击之后进入编辑状态
    // 获取label元素的父元素的下一个兄弟元素 input
    let input = e.target.parentNode.nextSibling
    // 调用父组件函数修改任务编辑状态
    this.props.showEditInput(id)
    setTimeout(() => {
      // 页面已经显示input元素之后才控制获取焦点
      input&&input.focus()
    }, 0)
  }

  handleEditEtile = (id, e) => {
    // 控制数组中对应标题的变化
    this.props.editTask(id, e.target.value)
  }

  render () {
    let { todos } = this.props
    let { isAll } = this.state
    let todoTags = todos.map(item => (
      <li key={item.id} className={[item.done?'completed':'', item.isEdit? 'editing': ''].join(' ')}>
        <div className="view" onDoubleClick={this.handleDoubleClick.bind(this, item.id)}>
          <input checked={item.done} onChange={this.handleCheck.bind(this, item.id)}  className="toggle" type="checkbox"/>
          <label>{item.etitle}</label>
          <button className="destroy" onClick={this.handleDelete.bind(this, item.id)}></button>
        </div>
        <input value={item.etitle} onChange={this.handleEditEtile.bind(this, item.id)} onBlur={this.handleDoubleClick.bind(this,item.id)}  className="edit" />
      </li>
    ))
    return (
      <section className="main">
        <input defaultChecked={isAll}  id="toggle-all" className="toggle-all" type="checkbox"/>
        <label onClick={this.toggleAll} htmlFor="toggle-all">全部标记为完成</label>
        <ul className="todo-list">
          {todoTags}
        </ul>
      </section>
    )
  }
}

export default List

数据显示

在这里插入图片描述

增加数据

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值