第二十二章 案例TodoList之鼠标事件

简介: 第二十二章 案例TodoList之鼠标事件

本小节,我们需要使用鼠标事件,给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.props
    const {mouseIn} = this.state
    return (
      <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})
  }

以上两种方式都可以成功实现功能,也能简化代码。

相关文章
|
1月前
|
JavaScript 定位技术 API
OpenLayers入门-第二篇、在vue3中使用elementplus制作图层控件,图层切换,显示隐藏,图层排序
OpenLayers入门-第二篇、在vue3中使用elementplus制作图层控件,图层切换,显示隐藏,图层排序
|
1月前
|
JavaScript
Vue实现【fiveClick】2秒内5连击(五连击)vue事件自定义、双击自定义、任意次连击
Vue实现【fiveClick】2秒内5连击(五连击)vue事件自定义、双击自定义、任意次连击
|
1月前
|
JSON JavaScript 前端开发
原生js做树形菜单(详细注释+加简易版)
原生js做树形菜单(详细注释+加简易版)
36 0
|
6月前
【Vue2.0学习】—键盘事件(三十三)
【Vue2.0学习】—键盘事件(三十三)
|
9月前
|
JavaScript 前端开发 开发者
|
10月前
|
JavaScript
原生js实现拖拽功能
原生js实现拖拽功能
52 0
|
JavaScript
如何用原生JS实现跑马灯效果
如何用原生JS实现跑马灯效果
150 0
如何用原生JS实现跑马灯效果
|
运维 JavaScript 前端开发
brython | 笨办法写个连连看-2. 监听鼠标事件
brython | 笨办法写个连连看-2. 监听鼠标事件
138 2
|
11月前
用vue3封装一个符合思维且简单实用的弹出层
用vue3封装一个符合思维且简单实用的弹出层
89 0
|
前端开发
前端学习笔记202304学习笔记第十六天-vue3.0-实现文本框失去焦点隐藏
前端学习笔记202304学习笔记第十六天-vue3.0-实现文本框失去焦点隐藏
73 0