React 编写TodoList功能

一、TodoList实现列表添加删除功能

添加webpack命令: yarn add webpack

创建components 目录及TodoList.js

pages 目录创建 show用来渲染TodoList组件

TodoList.js 代码

import React,{ Component } from 'react';
//Fragment 隐藏外层标签
class TodoList extends Component{
  //调用父类Component的构造函数,固定写法。
  constructor(props){
    super(props);
    //创建数据
    this.state={
      inputValue:'hello',
      list:['学习React','学习前端']
    }
  }
  render() {
    return (
      <div>
        {/*jsx语法,有提示。bind 改变this指向为调用的函数 */}
        <input onChange={this.handleInputChange.bind(this)} value={this.state.inputValue}/>
        <button onClick={this.handleBtnClick.bind(this)}>提交</button>
        <ul>
          {
            // 循环输出list
            this.state.list.map((item,index)=>{
              return (
                <li onClick={this.handleItemDelete.bind(this,index)} key={index}>
                  {item}
                </li>
              )
            })
          }
        </ul>
      </div>

    )
  }

  handleInputChange(e){
    this.setState({
      inputValue:e.target.value
    })
  }
  //添加
  handleBtnClick(){
    this.setState({
      //展开运算符,拿到以前数组的内容,生成新的数组。
      list:[...this.state.list,this.state.inputValue],
      inputValue:''
    })
  }
  //删除 index为下标
  handleItemDelete(index){
    const list=[...this.state.list];
    //删除一个下标为index的值
    list.splice(index,1);
    this.setState({
      list:list
    })
  }
}
export default  TodoList;

show.js 代码

import React from 'react';
import TodoList from '../components/TodoList';




export default function() {

  return (
    <div>
    <TodoList></TodoList>
    </div>
  );
}

测试

点击按钮可以增加,点击文字可以删除。

二、拆分组件修改功能

创建 TodoItem.js 通过this.props.content获取父组件传递的内容

import React,{ Component } from 'react';

class TodoItem extends Component{
constructor(props){
  super(props);
  this.handleClick=this.handleClick.bind(this);
}
  render() {
    return (
      <div onClick={this.handleClick}>
        {this.props.content}
      </div>

    )
  }
  handleClick(){
    this.props.deleteItem(this.props.index)
  }
}
export default  TodoItem;

TodoList.js 引入子组件

import React,{ Component } from 'react';
import TodoItem from "@/components/TodoItem";
//Fragment 隐藏外层标签
class TodoList extends Component{
  //调用父类Component的构造函数,固定写法。
  constructor(props){
    super(props);
    //创建数据
    this.state={
      inputValue:'hello',
      list:['学习React','学习前端']
    }
  }
  render() {
    return (
      <div>
        {/*jsx语法,有提示。bind 改变this指向为调用的函数 */}
        <input onChange={this.handleInputChange.bind(this)} value={this.state.inputValue}/>
        <button onClick={this.handleBtnClick.bind(this)}>提交</button>
        <ul>
          {
            // 循环输出list
            this.state.list.map((item,index)=>{
              return (
                <div>
                  {/*组件内容传递*/}
                    <TodoItem content={item} index={index} deleteItem={this.handleItemDelete.bind(this)}/>
                  {/*<li onClick={this.handleItemDelete.bind(this,index)} key={index}>*/}
                  {/*{item}*/}
                  {/*</li>*/}
                </div>

              )
            })
          }
        </ul>
      </div>

    )
  }

  handleInputChange(e){
    this.setState({
      inputValue:e.target.value
    })
  }
  //添加
  handleBtnClick(){
    this.setState({
      //展开运算符,拿到以前数组的内容,生成新的数组。
      list:[...this.state.list,this.state.inputValue],
      inputValue:''
    })
  }
  //删除 index为下标
  handleItemDelete(index){
    const list=[...this.state.list];
    //删除一个下标为index的值
    list.splice(index,1);
    this.setState({
      list:list
    })
  }
}
export default  TodoList;
发布了117 篇原创文章 · 获赞 32 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_17025903/article/details/100841266
今日推荐