react实现todolist的新增和删除(使用class类组件、组件拆分)

一、创建项目
查看react官方文档
https://reactjs.bootcss.com/docs/create-a-new-react-app.html

npx create-react-app my-app
cd my-app
yarn start

二、精简代码
刚刚开始接触react,创建完react项目以后,感觉文件好多,好复杂,这个时候我们把不需要的文件删掉,对于这个项目来说,我的src文件夹里面就剩下index.js入口文件,App.js文件,其他全部删掉,包括在index.js 和 App.js文件中的相关引用,也全部清除,这样,这个项目就精简了很多,并且对我们的todolist毫无影响,为了我们很快认识react的项目
1.将App.js重命名为Todolist.js,以及index.js中引入的App替换成Todolist
2.下文中TodoItem.js是个子组件

Todolist.js


import React from 'react';
import TodoItem from './TodoItem'

/**
 * Todolist是父组件
 * TodoItem 是子组件
 * 父组件向子组件用属性来进行传值
 * 子组件通过props来接收父组件传过来的参数
 * 子组件想和父组件通信。直接调用父组件的方法即可 eg: this.props.delete()
 * 
 * * */
class Todolist extends React.Component {
//初始化
  constructor(props){
    super(props)
    this.state = {
      list:[],
      value:''
    }
    //优化
    this.handleClick = this.handleClick.bind(this)
    this.changeInput = this.changeInput.bind(this)
    this.removeItem = this.removeItem.bind(this)
    this.deleteItem = this.deleteItem.bind(this)
  }
  handleClick(){
    this.setState({
      list:[...this.state.list,this.state.value],
      value:''
    })
  }
  changeInput(e){
    this.setState({
      value:e.target.value
    })
  }
  removeItem(index){
    const list = [...this.state.list]
    list.splice(index,1)
    this.setState({
      list
    })
    //这种方法虽然可以实现删除功能,但不建议直接操作state里面的值,会影响调试且性能低下
    // this.state.list.splice(index,1)
    // this.setState({
    //   list:this.state.list
    // })
  }
  deleteItem(index){
    const list = [...this.state.list]
    list.splice(index,1)
    this.setState({
      list
    })
  }
  getList(){
    return (
      this.state.list.map((item,index) =>{
              
        // 组件拆分之前
        // return <li key={index} onClick={this.removeItem.bind(this,index)}>{item}</li>
        // 组件拆分之后
        return <TodoItem content={item} key={index} index={index} delete={this.deleteItem}/>
      })
    )
  }
  render() {
    return (
      <div>
        <input type="text" placeholder="请填写要添加的内容" onChange={this.changeInput} value={this.state.value}/>
        <button onClick={this.handleClick}>add</button>
        <ul>
          {
            this.getList()
          }
        </ul>
      </div>
    )
  }
}

export default Todolist;

TodoItem.js

import React from 'react'
class TodoItem extends React.Component{
    constructor(props){
        super(props)
        this.remove = this.remove.bind(this)
    }
    remove(){
        this.props.delete(this.props.index)
    }
    render() {
    //解构赋值
        const {content} = this.props
        return (
            <li onClick={this.remove}>{content}</li>
        )
    }
}
export default TodoItem

这个网址会更加详细的讲解以上内容
https://www.imooc.com/video/17566

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值