高阶组件
博主文档
父组件
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>
<input
value={this.state.inputValue}
onChange={this.handleInputChange}
/>
<button onClick={this.handleBtnClick}>提交</button>
</div>
<ul>
{this.getTodoItem()}
</ul>
</Fragment >
)
}
getTodoItem() {
return this.state.list.map((item, index) => {
return (
<TodoItem
item={item}
index={index}
deleteItem={this.handleItemDelete}
key={index}
/>
)
})
}
handleInputChange(e) {
const value = e.target.value
this.setState(() => ({
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 }
})
}
}
export default TodoList;
子组件
import React, { Component } from 'react'
import PropTypes from 'prop-types'
class TodoItem extends Component {
static defaultProps = {
test: 'hello world'
}
constructor(props) {
super(props)
this.handleItemDelete = this.handleItemDelete.bind(this)
}
render() {
const { item, test } = this.props
return (
<div onClick={this.handleItemDelete}>
{test} ———— {item}
</div>
)
}
handleItemDelete() {
const { deleteItem, index } = this.props
deleteItem(index)
}
}
TodoItem.propTypes = {
item: PropTypes.string.isRequired,
deleteItem: PropTypes.func,
index: PropTypes.number,
test: PropTypes.string.isRequired
}
TodoItem.defaultProps = {
test: 'hello world'
}
export default TodoItem