React—todolist

React—todolist

父组件

import React from 'react';
import ReactDom from 'react-dom';
import Header from './component/header'
import List from './component/list'
let arr = []; // 定义一个空数组用来储存每次输入的内容
class ToDoList extends React.Component {
    constructor () {
        super ();
        this.state = {
            msg: '' // 定义一个空变量,用来储存输入的内容
        }
    }
    // 以下三个方法都父组件定义,在子组件中调用
    handleChange (e) { // input框输入内容更新msg
        this.setState ({
            msg: e.target.value
        })

    }
    handleClick () { // 点击确认发送
        if (this.state.msg != '') { // 如果输入框内容不为空
            arr.push(this.state.msg); // 数组添加输入框的内容
            this.setState ({ // 清空输入框
                msg: ''
            })
        }
    }
    handleKeyDown (e) { // 回车发送
        if (e.keyCode == 13) { // 如果keycode是13证明是回车键
            this.handleClick() // 直接调用点击确认发送的方法
        }
    }
    render () {
        return (
            <div>
                {/*
                    msg={this.state.msg}给子组件传值
                    handleChange={this.handleChange.bind(this)}
                    handleClick={this.handleClick.bind(this)}
                    handleKeyDown={this.handleKeyDown.bind(this)}
                    给子组件传方法
                */}
                <Header
                    msg={this.state.msg}
                    handleChange={this.handleChange.bind(this)}
                    handleClick={this.handleClick.bind(this)}
                    handleKeyDown={this.handleKeyDown.bind(this)}
                />
                {/*给List子组件传arr数组的值*/}
                <List arr={arr}/>
            </div>
        )
    }
}

ReactDom.render(
    <ToDoList />,
    document.getElementById('root')
);

子组件(header)

import React, {Component} from 'react';
export default class Header extends Component {
    render () {
        return (
            <div>
                {/*
                    value={this.props.msg}子组件中input的value值是获取父组件传过来的msg值
                    onKeyDown={this.props.handleKeyDown}子组件按键时触发父组件定义的handleKeyDown方法
                    onChange={this.props.handleChange}子组件的input输入框发生变化时触发父组件定义的handleChange方法
                */}
                <input
                    type="text"
                    value={this.props.msg}
                    onKeyDown={this.props.handleKeyDown}
                    onChange={this.props.handleChange}
                />
                {/*子组件点击按钮触发父组件的handleClick方法*/}
                <button onClick={this.props.handleClick}>发送</button>
            </div>
        )
    }
}

子组件(list)

import React, {Component} from 'react';
export default class List extends Component {
    render () {
        // this.props.arr是子组件获取的父组件传过来的数组
        // 然后利用map循环数组创建li
        const listItems = this.props.arr.map((item, i) =>
            <li key={i}>{item}</li>
        )
        return (
            <div>
                <ul>
                    {listItems}
                </ul>
            </div>
        )
    }
}

效果:
在这里插入图片描述

发布了157 篇原创文章 · 获赞 15 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Poppy_LYT/article/details/100732229