代码实现
先传个代码,明天下课讲讲思路
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.active{
background: pink;
}
</style>
</head>
<body>
<div id="app"></div>
<script src="./babel.min.js"></script>
<script src="./react.development.js"></script>
<script src="./react-dom.development.js"></script>
<script type="text/babel">
class Main extends React.Component {
constructor() {
super()
this.state = {
list: [
{
id: 1,
name: '吃饭',
isActive: false
},
{
id: 2,
name: '睡觉',
isActive: false
},
{
id: 3,
name: '写代码',
isActive: true
}
],
showList:[
{
id: 1,
name: '吃饭',
isActive: false
},
{
id: 2,
name: '睡觉',
isActive: false
},
{
id: 3,
name: '写代码',
isActive: true
}
]
}
this.add=this.add.bind(this)
this.del=this.del.bind(this)
this.change=this.change.bind(this)
this.search=this.search.bind(this)
}
add(data){
let list =[...this.state.list]
list.push({
id: new Date().getTime(),
name:data,
isActive:false
})
this.setState({
list,
showList:list
})
}
del(id) {
let list =this.state.list.filter(item=>{
return item.id!==id
})
this.setState({
list,
showList:list
})
}
change(id){
let list=[...this.state.list]
list.forEach(item=>{
if(item.id===id){
item.isActive=!item.isActive
}
})
this.setState({
list,
showList:list
})
}
search(value){
let list =this.state.list.filter(item=>{
return item.name.includes(value)
})
{}
this.setState({
showList:list
})
}
render() {
return (
<div>
<h1>To Do List</h1>
{}
<Search searchFun={this.search}/>
{}
<Add addFun={this.add}/>
{}
<List list={this.state.showlist} delFun={this.del} changeFun={this.change}/>
</div>
)
}
}
class Search extends React.Component {
constructor() {
super()
this.searchHandler=this.searchHandler.bind(this)
this.myInput=React.createRef()
}
searchHandler(){
console.log(this.myInput.current.value)
this.props.searchFun(this.myInput.current.value)
}
render() {
return (
<div>
搜索:
{}
<input type="text" ref={this.myInput} onKeyUp={this.searchHandler}/>
</div>
)
}
}
class Add extends React.Component {
constructor() {
super()
this.addHandler= this.addHandler.bind(this)
this.myInput=React.createRef()
}
addHandler(){
console.log(this.myInput.current.value)
this.props.addFun(this.myInput.current.value)
this.myInput.current.value=''
}
render() {
return (
<div>
添加:
{}
<input type="text" ref={this.myInput}/>
<button onClick={this.addHandler}>add</button>
</div>
)
}
}
class List extends React.Component {
constructor() {
super()
}
delHandler(id){
this.props.delFun(id)
}
changeHandler(id){
this.props.changeFun(id)
}
render() {
let { list } = this.props
return (
<ul>
{
list.map(obj => {
return (
<li key={obj.id} className={obj.isActive ? 'active' : ''}>
{}
<input type="checkbox" defaultChecked={obj.isActive} onChange={this.changeHandler.bind(this,obj.id)} />
<span>{obj.name}</span>
<button onClick= {this.delHandler.bind(this,obj.id)}>delete</button>
</li>
)
})
}
</ul>
)
}
}
ReactDOM.render(<Main/>, document.querySelector('#app'))
</script>
</body>
</html>
|