import React, { Component } from "react";
import PropTypes from 'prop-types';
class TodoItem extends Component {
constructor(props) {
super(props);
this.handleDel = this.handleDel.bind(this);
}
render() {
const { index, item, test} = this.props;
return (
<div index={index} onClick={this.handleDel}>
<li>{test} - {item}</li>
</div>
);
}
handleDel() {
const { deleteItem, index } = this.props;
deleteItem(index);
}
}
TodoItem.propTypes = {
content: PropTypes.oneOfType([PropTypes.number,PropTypes.string]),
deleteItem: PropTypes.func,
index: PropTypes.number,
test: PropTypes.string.isRequired,
}
TodoItem.defaultTypes ={
test: 'Hello World!'
}
export default TodoItem;
import React, { Component, Fragment } from "react";
import TodoItem from './TodoItem'
import './style.css';
class TodoList extends Component {
constructor(props) {
super(props);
this.state = {
inputValue: "",
list: []
};
this.handleAdd = this.handleAdd.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handleDel = this.handleDel.bind(this);
}
render() {
return (
<Fragment>
<div>
{}
<label htmlFor="insertArea">请输入: </label>
<input
id="insertArea"
value={this.state.inputValue}
onChange={this.handleChange}
className='input'
/>
<button onClick={this.handleAdd}>+Add</button>
</div>
<ul>
{ this.getTodoItem()}
</ul>
</Fragment>
);
}
getTodoItem() {
{}
return this.state.list.map((item, index) => {
return (
<div key={index}>
{}
<TodoItem
item={item}
index={index}
deleteItem={this.handleDel}
/>
{}
</div>
)
})
}
handleChange(e) {
this.setState({
inputValue: e.target.value
},() => {console.log('这是setState回调函数')});
{}
{}
}
handleDel(index) {
const list = [...this.state.list];
list.splice(index, 1);
this.setState({
list: list
});
{}
}
handleAdd() {
{}
this.setState({
list: [...this.state.list, this.state.inputValue],
inputValue: ""
});
}
}
export default TodoList;