美文网首页
02.React基础Demo——Todolist

02.React基础Demo——Todolist

作者: 小二的学习日记 | 来源:发表于2020-07-12 10:55 被阅读0次

这里贴出一套Todolist的完整代码。

我们实现的功能是,在输入框添加数据后,点击提交,提交的内容会更新到下面的列表中;点击列表中的一项,则会删除这条item。
用到的知识点:父子通信、fragment、state更新数据等react基础知识
面试可能会问到的问题:父子传值是怎么实现的?
回答:父传子,通过自定义属性向下传;子传父,通过自定义方法传递参数的形式传值。

image.png
//===>src/TodoList.js
import React, { Component, Fragment } from 'react'
import TodoItem from './TodoItem'

class TodoList extends Component {
    constructor(props) {
        super(props)
        this.state = {
            inputValue: '',
            list: []
        }
        this.handleInputChange = this.handleInputChange.bind(this)
        this.handleBtnClick = this.handleBtnClick.bind(this)
        this.handleItemDelete = this.handleItemDelete.bind(this)
    }

    render() {
        return (
            <Fragment>
                <div>
                    <label htmlFor='insertArea'>输入内容</label>
                    <input id='insertArea' className='input'
                        value={this.state.inputValue}
                        onChange={this.handleInputChange} />
                    <button onClick={this.handleBtnClick}>提交</button>
                </div>
                <ul>
                    {this.getTodoItem()}
                </ul>
            </Fragment>
        )
    }

    handleInputChange(e) {
        const value = e.target.value
        this.setState(() => {
            return {
                inputValue: value
            }
        })
    }

    handleBtnClick() {
        this.setState((prevState) => ({
            list: [...prevState.list, prevState.inputValue],
            inputValue: ''
        }))
    }

    handleItemDelete(index) {
        this.setState((prevState) => {
            const list = [...prevState.list]
            list.splice(index, 1)
            return { list }
        })
    }

    getTodoItem() {
        return this.state.list.map((item, index) => {
            return (
                    <TodoItem
                        key={index}
                        content={item}
                        index={index}
                        deleteItem={this.handleItemDelete} />
            )
        })
    }
}

export default TodoList
//===>src/TodoItem.js
import React, { Component } from 'react'
class TodoItem extends Component {
    constructor(props) {
        super(props)
        this.handleClick = this.handleClick.bind(this)
    }
    render() {
        const { content } = this.props
        return (
            <div onClick={this.handleClick}>
                {content}
            </div>
        )
    }
    handleClick() {
        const { deleteItem, index } = this.props
        deleteItem(index)
    }
}

export default TodoItem
//===>src/App.js
import React from 'react';
import TodoList from './TodoList'
function App() {
  return (
    <div className="App">
      <TodoList />
    </div>
  );
}

export default App;

相关文章

网友评论

      本文标题:02.React基础Demo——Todolist

      本文链接:https://www.haomeiwen.com/subject/wwjpcktx.html