问题背景:该回调函数含有参数,是调用了函数后返回的结果,所以该回调函数的返回值应该是函数,在返回函数中进行处理事务,否则没触发动作就会发起处理!
如:
export class Item extends Component {
//鼠标是否移入的状态
state = {mouse:false}
//改变鼠标状态
handleMouse = (flag) => {
return () => {
this.setState({mouse:flag})
}
}
render() {
const {name,done} = this.props
const {mouse} = this.state
return (
// 该回调函数是直接调用了函数,在返回函数中进行处理事务
<li style={{backgroundColor: mouse ? '#ddd':'white'}} onMouseEnter={this.handleMouse(true)} onMouseLeave={this.handleMouse(false)}>
<label>
<input type="checkbox" defaultChecked={done}/>
<span>{name}</span>
</label>
<button className="btn btn-danger" style={{display:mouse ? 'block':'none'}}>删除</button>
</li>
)
}
}
不用函数柯里化实现的话,也可以直接在行内采用赋值为箭头函数的形式,同理
//回调函数无需高阶
handleMouse = (flag) => {
this.setState({mouse:flag})
}
//DOM此方法调用
onMouseEnter={()=>{this.handleMouse(true)}}
onMouseLeave={()=>{this.handleMouse(false)}}>