- ReactJS 教程
- ReactJS - 首页
- ReactJS - 简介
- ReactJS - 路线图
- ReactJS - 安装
- ReactJS - 功能
- ReactJS - 优点与缺点
- ReactJS - 架构
- ReactJS - 创建 React 应用
- ReactJS - JSX
- ReactJS - 组件
- ReactJS - 嵌套组件
- ReactJS - 使用新创建的组件
- ReactJS - 组件集合
- ReactJS - 样式
- ReactJS - 属性 (props)
- ReactJS - 使用属性创建组件
- ReactJS - props 验证
- ReactJS - 构造函数
- ReactJS - 组件生命周期
- ReactJS - 事件管理
- ReactJS - 创建一个事件感知组件
- ReactJS - 在 Expense Manager 应用中引入事件
- ReactJS - 状态管理
- ReactJS - 状态管理 API
- ReactJS - 无状态组件
- ReactJS - 使用 React Hooks 进行状态管理
- ReactJS - 使用 React Hooks 进行组件生命周期管理
- ReactJS - 布局组件
- ReactJS - 分页
- ReactJS - Material UI
- ReactJS - Http 客户端编程
- ReactJS - 表单编程
- ReactJS - 受控组件
- ReactJS - 非受控组件
- ReactJS - Formik
- ReactJS - 条件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 动画
- ReactJS - Bootstrap
- ReactJS - Map
- ReactJS - 表格
- ReactJS - 使用 Flux 管理状态
- ReactJS - 测试
- ReactJS - CLI 命令
- ReactJS - 构建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 简介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定义 Hooks
- ReactJS 高级
- ReactJS - 可访问性
- ReactJS - 代码分割
- ReactJS - Context
- ReactJS - 错误边界
- ReactJS - 转发 Refs
- ReactJS - 片段
- ReactJS - 高阶组件
- ReactJS - 与其他库集成
- ReactJS - 优化性能
- ReactJS - Profiler API
- ReactJS - Portals
- ReactJS - 无 ES6 ECMAScript 的 React
- ReactJS - 无 JSX 的 React
- ReactJS - 协调
- ReactJS - Refs 和 DOM
- ReactJS - Render Props
- ReactJS - 静态类型检查
- ReactJS - Strict Mode
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期选择器
- ReactJS - Helmet
- ReactJS - 内联样式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走马灯
- ReactJS - 图标
- ReactJS - 表单组件
- ReactJS - 参考 API
- ReactJS 有用资源
- ReactJS - 快速指南
- ReactJS - 有用资源
- ReactJS - 讨论
ReactJS - 鼠标事件处理程序
鼠标事件是 Web 开发的一个重要方面,尤其是在 React 中。它们允许我们构建对用户输入做出响应的动态 Web 应用。我们将在下一节中介绍一些鼠标事件及其功能。然后,我们将创建一个基本的 React 应用,当发生某些鼠标事件时,该应用会将消息记录到控制台,以演示这些概念。
React MouseEvent
在 HTML 元素上,我们可以在 React 中处理诸如 onClick、onMouseEnter、onMouseLeave、onMouseDown、onMouseUp 和 onMouseOver 之类的鼠标事件。当用户使用鼠标与组件交互时,会发生多个事件。让我们在 React 应用的上下文中看看它们。
语法
鼠标事件事件处理程序示例。
<div
onClick={e => console.log('This is onClick')}
onMouseDown={e => console.log('This is onMouseDown')}
onMouseUp={e => console.log('This is onMouseUp')}
onMouseLeave={e => console.log('This is onMouseLeave')}
onMouseEnter={e => console.log('This is onMouseEnter')}
onMouseOver={e => console.log('This is onMouseOver')}
/>
参数
e − 这是一个 React 事件对象。我们可以将此对象与各种 MouseEvent 属性一起使用。
MouseEvent 属性
让我们快速浏览一下与 MouseEvent 相关的属性 −
| 序号 | 属性及说明 |
|---|---|
| 1 | altKey 如果在触发鼠标事件时按下“Alt”键,则返回 true。 |
| 2 | button 指示在鼠标事件期间按下的按钮编号(如果适用)。 |
| 3 | buttons 表示鼠标事件发生时按下的按钮。 |
| 4 | clientX 和 clientY 提供鼠标指针在元素内的 X 和 Y 坐标。 |
| 5 | ctrlKey 如果在鼠标事件期间按下“Ctrl”键,则返回 true。 |
| 6 | metaKey 指示鼠标事件发生时是否按下“Meta”键。 |
| 7 | movementX 和 movementY 显示自上次 mousemove 事件以来鼠标指针的 X 和 Y 坐标的变化。 |
| 8 | pageX 和 pageY 给出相对于整个文档的鼠标指针的 X 和 Y 坐标。 |
| 9 | relatedTarget 表示事件的次要目标(如果存在)。 |
| 10 | screenX 和 screenY 提供全局(屏幕)坐标中鼠标指针的 X 和 Y 坐标。 |
| 11 | shiftKey 如果在鼠标事件发生时按下“Shift”键,则返回 true。 |
这些属性允许我们访问和控制鼠标事件信息,这对于在 React 中创建动态且响应迅速的用户界面非常重要。
示例
示例 − 简单卡片记录器
让我们创建一个应用,当用户与一组卡片交互时,该应用会响应鼠标事件。当鼠标悬停在这些卡片上时,它们的事件将发生变化,并在控制台中显示消息。代码如下 −
App.js
import React, { useState } from "react";
import "./App.css";
export default function App () {
return (
<div>
<div
className="card"
onMouseEnter={e => console.log('Card 1 onMouseEnter')}
onMouseOver={e => console.log('Card 1 onMouseOver')}
onMouseDown={e => console.log('Card 1 onMouseDown')}
onMouseUp={e => console.log('Card 1 onMouseUp')}
onMouseLeave={e => console.log('Card 1 onMouseLeave')}
>
Card 1
</div>
<div className="card"
onMouseEnter={e => console.log('Card 2 onMouseEnter')}
onMouseOver={e => console.log('Card 2 onMouseOver')}
onMouseDown={e => console.log('Card 2 onMouseDown')}
onMouseUp={e => console.log('Card 2 onMouseUp')}
onMouseLeave={e => console.log('Card 2 onMouseLeave')}
>
Card 2
</div>
</div>
);
}
App.css
.App {
font-family: sans-serif;
text-align: center;
}
.loader {
display: flex;
justify-content: center;
align-items: center;
height: 100vh; /* Centers the loader vertically */
}
.card {
background-color: skyblue;
padding-left: 120px;
margin-bottom: 20px;
width: 200px;
height: 40px;
}
输出
当不同的鼠标事件(例如 onMouseEnter、onMouseOver、onMouseDown、onMouseUp 和 onMouseLeave)触发上述示例中的卡片时,App 组件会向控制台发送消息。这些事件用于跟踪和响应用户与卡片的交互,例如鼠标指针进入、悬停、点击或离开卡片。
示例 − 点击切换背景颜色
此应用将具有一个具有可点击区域的 <div> 元素。当我们点击 <div> 时,它将在两种背景颜色之间切换:浅绿色和浅珊瑚色。该应用使用状态来跟踪点击状态,并在切换背景颜色时将消息记录到控制台。光标设置为指针以指示 <div> 可点击。
App.js
import React, { useState } from "react";
export default function App() {
const [isClicked, setClicked] = useState(false);
const handleClick = () => {
setClicked(!isClicked);
console.log('Background Toggled');
};
return (
<div
onClick={handleClick}
style={{
width: "200px",
height: "100px",
backgroundColor: isClicked ? "lightcoral" : "lightgreen",
textAlign: "center",
paddingTop: "25px",
// lineHeight: "100px",
cursor: "pointer",
}}
>
Change Background Color App
</div>
);
}
输出
示例 − 交互式按钮应用
这是另一个使用 <div> 元素和各种 MouseEvent 处理程序的 React 应用。因此,我们将创建一个交互式按钮状 <div> 元素。当发生各种鼠标事件(如单击、鼠标按下、鼠标抬起、鼠标离开、鼠标进入和鼠标悬停)时,它将向控制台记录消息。div 将具有浅蓝色背景,并且光标将更改为指针以指示其交互性。
App.js
import React from "react";
export default function App() {
return (
<div
onClick={(e) => console.log('This is onClick')}
onMouseDown={(e) => console.log('This is onMouseDown')}
onMouseUp={(e) => console.log('This is onMouseUp')}
onMouseLeave={(e) => console.log('This is onMouseLeave')}
onMouseEnter={(e) => console.log('This is onMouseEnter')}
onMouseOver={(e) => console.log('This is onMouseOver')}
style={{
width: "250px",
height: "50px",
backgroundColor: "lightblue",
textAlign: "center",
lineHeight: "50px",
marginTop: "25px",
cursor: "pointer",
}}
>
Click and Hover Here
</div>
);
}
输出
总结
因此,了解鼠标事件和相关属性对于使用 React 开发动态 Web 应用非常重要。通过使用这些事件,我们可以设计出对用户交互做出响应的有吸引力的用户体验。React 为我们提供了创建悬停效果、处理按钮点击和监视鼠标移动所需的功能。