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 - Hooks 进行状态管理 ReactJS - Hooks 的组件生命周期 ReactJS - 布局组件 ReactJS - 分页 ReactJS - Material UI ReactJS - Http 客户端编程 ReactJS - 表单编程 ReactJS - 受控组件 ReactJS - 非受控组件 ReactJS - Formik ReactJS - 条件渲染 ReactJS - 列表 ReactJS - Key 键 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 - 上下文 ReactJS - 错误边界 ReactJS - 转发 Refs ReactJS - 片段 ReactJS - 高阶组件 ReactJS - 与其他库集成 ReactJS - 优化性能 ReactJS - Profiler API ReactJS - Portals ReactJS - 不使用 ES6 ECMAScript ReactJS - 不使用 JSX 的 React ReactJS - Reconciliation ReactJS - Refs 和 DOM ReactJS - 渲染道具 ReactJS - 静态类型检查 ReactJS - 严格模式 ReactJS - Web 组件

其他概念

ReactJS - 日期选择器 ReactJS - Helmet ReactJS - 内联样式 ReactJS - PropTypes ReactJS - BrowserRouter ReactJS - DOM ReactJS - 轮播 ReactJS - 图标 ReactJS - 表单组件 ReactJS - 参考 API

ReactJS 有用资源

ReactJS - 快速指南 ReactJS - 备忘录 Axios - 备忘录 ReactJS - 有用资源 ReactJS - 讨论


ReactJS - DragEvent 处理程序

在 React JS 中有一个名为 DragEvent 的事件处理程序函数。DragEvent 处理程序函数是一个 Web 开发函数,用于控制和响应用户在网页上拖放项目时发生的事件。这些 HTML 拖放 API 事件使用户能够使 Web 项目可拖动并为其定义放置区域。

语法

<>
   <div
      draggable={true}
      onDragStart={e => console.log('onDragStart')}
      onDragEnd={e => console.log('onDragEnd')}
   >
      Source
   </div>   
   <div
      onDragEnter={e => console.log('onDragEnter')}
      onDragLeave={e => console.log('onDragLeave')}
      onDragOver={e => { e.preventDefault(); console.log('onDragOver'); }}
      onDrop={e => console.log('onDrop')}
   >
      Destination
   </div>
</>

DragEvent 处理函数对于创建交互式和用户友好的 Web 界面非常重要。它们允许我们控制开始拖动某项、进入放置区域、离开放置区域、将拖动项移动到放置区域以及简单地放下时发生的情况。这些功能允许我们调整网页对拖放活动的响应方式。

参数

名为"e"的特定对象作为参数发送到 DragEvent 处理程序方法。这个"e"对象保存了有关拖放事件的重要信息,例如正在传输哪个项目,以及描述事件的属性,例如是否按下了特定的"Ctrl"或"Shift"键。

以下是"e"对象的重要属性 −

Sr.No 属性 &描述
1 dataTransfer

此属性可帮助我们访问被拖动元素的数据,这对于管理拖放操作非常重要。

2 altKey

指示在事件期间是否按下了键盘上的"Alt"键。

3 ctrlKey

告诉我们在事件期间是否按下了键盘上的"Ctrl"键。

4 shiftKey

指示在事件期间是否按下了键盘上的"Shift"键发生。

5 onDragEnter

当我们将元素拖入放置区域时,会发生此事件。

6 onDragLeave

当我们将鼠标指针移出放置区域时发生。

7 onDragOver

当鼠标光标移动到放置区域上方时,会发生此事件。

8 onDrop

当我们将拖动的对象放入放置区域时,会发生此事件区域。

示例

示例 − 拖放应用程序

因此,我们正在创建一个简单的应用程序,该应用程序展示了处理程序函数"DragEvent"的用法。它创建了一个基本的拖放界面,其中包含一个拖动的源项目和一个我们可以在其中放置拖动对象的目标项目。让我们来看看代码 −

import react, { usestate } from "react";

function app(){
   return (
      <div>
         <>
            <div
               draggable={true}
               ondragstart={(e) => console.log("ondragstart")}
               ondragend={(e) => console.log("ondragend")}
            >
               source  for dragging
            </div>      
            <div
               ondragenter={(e) => console.log("ondragenter")}
               ondragleave={(e) => console.log("ondragleave")}
               ondragover={(e) => {
                  e.preventdefault();
                  console.log("ondragover");
               }}
               ondrop={(e) => console.log("ondrop")}
            >
               destination for dragging
            </div>
         </>
      </div>
   );
}

export default app;

输出

drag source

我们提供的代码使用事件处理程序在拖放过程的不同阶段将消息记录到控制台。

示例 − 图像上传应用程序

现在让我们为拖放图像上传创建一个简单的 React 应用程序。在此应用程序中,用户将能够拖放图像以进行上传。并在图库中显示上传的图像。因此,我们将使用 React DragEvent 处理程序来处理图像拖放事件。此外,我们还将使用 useState 来管理上传图像的列表。代码如下 −

import React, { useState } from 'react';

const ImageUploadApp = () => {
   const [uploadedImages, setUploadedImages] = useState([]);   
   const handleDragOver = (e) => {
      e.preventDefault();
   };   
   const handleDrop = (e) => {
      e.preventDefault();      
      const files = Array.from(e.dataTransfer.files);
      
      // 使用新图像更新状态
      setUploadedImages((prevImages) => [...prevImages, ...files]);
   };   
   return (
      <div>
         <div
            style={{ border: '2px dashed #ccc', padding: '20px' }}
            onDragOver={handleDragOver}
            onDrop={handleDrop}
         >
            <p>Drag and drop images here</p>
         </div>
         
         <div>
            <h2>Uploaded Images:</h2>
            <div style={{ display: 'flex', flexWrap: 'wrap' }}>
               {uploadedImages.map((image, index) => (
                  <img
                     key={index}
                     src={URL.createObjectURL(image)}
                     alt={`uploaded-${index}`}
                     style={{ width: '100px', height: '100px', margin: '5px' }}
                  />
               ))}
            </div>
         </div>
      </div>
   );
};

export default ImageUploadApp;

输出

drag anddropimages

正如我们在输出图像中看到的那样,当图像被拖放时,图像就会出现在前端。我们可以根据具体要求定制和增强此应用程序。

示例 − 测验应用程序

让我们为拖放测验创建一个基本的 React 应用程序。因此,在此应用程序中,我们将显示问题列表及其相应的答案选项。此应用程序将允许用户拖放答案选项以将其与正确的问题匹配。因此,我们将使用 React DragEvent 处理程序来处理拖放功能。此外,我们将向用户提供有关其答案是否正确的反馈。此应用程序的代码如下 −

import React, { useState } from 'react';

const QuizApp = () => {
   const [questions, setQuestions] = useState([
      { id: 1, text: 'Who is known as the father of Artificial Intelligence?', correctAnswer: 'John McCarthy' },
      { id: 2, text: 'Chandrayaan3 landed on moon on which of the following date -', correctAnswer: '23rd August 2023' },
   ]);   
   const [userAnswers, setUserAnswers] = useState([]);   
   const handleDragStart = (e, answer) => {
      e.dataTransfer.setData('text/plain', answer);
   };   
   const handleDragOver = (e) => {
      e.preventDefault();
   };   
   const handleDrop = (e, questionId) => {
      e.preventDefault();
      
      // 获取拖动的答案
      const droppedAnswer = e.dataTransfer.getData('text/plain');
      
      // 更新用户答案状态
      setUserAnswers((prevAnswers) => [...prevAnswers, { questionId, answer: droppedAnswer }]);
   };
   
   const checkAnswers = () => {
      // 将用户答案与正确答案进行比较
      const feedback = userAnswers.map(({ questionId, answer }) => {
         const question = questions.find((q) => q.id === questionId);
         return {
            questionId,
            isCorrect: answer === question.correctAnswer,
         };
      });      
      console.log(feedback);
   };
   
   return (
      <div>
         <h2>Drag-and-Drop Quiz</h2>
         <div>
            {questions.map((question) => (
               <div
                  key={question.id}
                  style={{ border: '1px solid #ccc', margin: '10px', padding: '10px' }}
                  onDragOver={handleDragOver}
                  onDrop={(e) => handleDrop(e, question.id)}
               >
                  <p>{question.text}</p>
                  <div
                     draggable
                     onDragStart={(e) => handleDragStart(e, question.correctAnswer)}
                     style={{ border: '1px solid #aaa', padding: '5px', cursor: 'move' }}
                  >
                  {question.correctAnswer}
                  </div>
               </div>
            ))}
         </div>
         <button onClick={checkAnswers}>Check Answers</button>
      </div>
   );
};

export default QuizApp;

输出

拖放测验

此示例设置了一个测验,用户可以拖放正确的答案选项以将其与相应的问题匹配。单击"检查答案"按钮时,应用程序会提供有关用户答案正确性的反馈。我们可以根据特定的测验要求进一步定制此应用程序。

摘要

DragEvent 处理程序函数用于管理拖放时 Web 项目的行为。它们是开发交互式和用户友好的 Web 界面所必需的。作为参数,这些方法接受事件对象("e"),其中包括有关拖放过程的信息以及按下的键等事件属性。我们可以通过应用这些函数及其属性来个性化我们的网页对拖放活动的响应方式,使我们的网站对用户更具吸引力。

reactjs_reference_api.html