本小节,我们需要使用鼠标事件,给Item
组件添加背景颜色,并显示删除按钮。
添加鼠标移入和移出事件
import React, { Component } from 'react'
import "./index.css"
export default class Item extends Component {// 初始化状态数据state = {mouseIn:false}// 鼠标移入事件enterHandle = () => {this.setState({mouseIn:true})}// 鼠标移出事件outHandle = () => {this.setState({mouseIn:false})}render() {const {name,done} = this.propsconst {mouseIn} = this.statereturn (<li onMouseEnter={this.enterHandle} onMouseLeave={this.outHandle} style={{backgroundColor: mouseIn?'gainsboro':''}}><label><input type="checkbox" defaultChecked={done}/><span>{name}</span></label><button className="btn btn-danger" style={{display:mouseIn?"block":"none"}}>删除</button></li>)}
}
主要的改造点:
- 初始化一个状态数据,用于控制背景颜色和删除按钮
// 初始化状态数据state = {mouseIn:false}
当值为true
的时候,背景颜色变为灰色,删除按钮显示。为false
的时候,背景颜色变回白色,删除按钮隐藏。
- 新增鼠标移入事件处理
// 鼠标移入事件enterHandle = () => {this.setState({mouseIn:true})}
此时修改值为true
,背景颜色变为了灰色,删除按钮显示。
- 新增鼠标移出事件处理
// 鼠标移出事件outHandle = () => {this.setState({mouseIn:false})}
此时修改值为false
,背景颜色变为了白色,删除按钮隐藏。
简化事件代码
之前我们学习过如何简化事件中的代码:使用高阶函数或者内联的箭头函数
- 使用函数柯里化优化事件回调函数
// 在标签事件里面使用布尔值作为参数传递给回调函数
onMouseEnter={this.mouseHandle(true)} onMouseLeave={this.mouseHandle(false)}// 鼠标移入移出回调函数 mouseHandle = (flag) => {return () => {this.setState({mouseIn:flag})}}
当我们鼠标移入时,传一个true
的布尔值,鼠标移出时,传入一个false
的布尔值。
- 使用内联箭头函数优化事件回调函数
// 在标签的事件里面使用布尔值作为参数传递给回调函数
onMouseEnter={()=>this.mouseHandle(true)} onMouseLeave={()=>this.mouseHandle(false)}// 鼠标移入移出回调函数 mouseHandle = (flag) => {this.setState({mouseIn:flag})}
以上两种方式都可以成功实现功能,也能简化代码。