Heim Web-Frontend js-Tutorial React: Das Ereignissystem von React verstehen

React: Das Ereignissystem von React verstehen

Aug 28, 2024 am 06:03 AM

React: Understanding React

Überblick über das Ereignissystem von React

Was ist ein synthetisches Ereignis?

Synthetische Ereignisse sind ein von React entwickelter Ereignisverarbeitungsmechanismus, um browserübergreifende Kompatibilität zu erreichen, die Leistung zu optimieren und die Ereignisverarbeitung zu vereinfachen. Es kapselt native Browser-Ereignisse, bietet einen einheitlichen API- und Ereignisbehandlungsansatz und gewährleistet so ein konsistentes Ereignisverhalten über verschiedene Browser hinweg.

Funktionsprinzip synthetischer Ereignisse

Veranstaltungsdelegation

React verarbeitet Ereignisse über einen Ereignisdelegierungsmechanismus. Ereignisdelegation bedeutet, dass React Ereignis-Listener nicht direkt an jedes DOM-Element bindet. Stattdessen bindet es alle Ereignis-Listener an einen einzelnen Stammknoten (normalerweise das Dokument oder den Stammcontainer der Anwendung). Wenn ein Benutzer mit der Seite interagiert und ein Ereignis auslöst, wird das Ereignis im DOM-Baum zum Stammknoten weitergeleitet, wo React das Ereignis erfasst und als synthetisches Ereignis verpackt.

Vorteile der Event-Delegation:

  • Leistungsoptimierung: Reduziert die Anzahl der Event-Handler, die gebunden werden müssen, und senkt dadurch die Speichernutzung.

  • Vereinfachte Ereignisverwaltung: Durch die Verwaltung aller Ereignisse am Stammknoten kann React die Ereignisweitergabe effizienter handhaben, Standardverhalten verhindern und andere ereignisbezogene Vorgänge ausführen.

Event-Pooling

Ein Schlüsselmechanismus hinter synthetischen Ereignissen ist das Ereignis-Pooling. Event-Pooling bedeutet, dass React Event-Objekte wiederverwendet, anstatt jedes Mal, wenn ein Event ausgelöst wird, ein neues Event-Objekt zu erstellen. Wenn ein Ereignis auftritt, entnimmt React ein Ereignisobjekt aus dem Ereignispool, initialisiert es und übergibt es an den Ereignishandler. Nachdem die Ereignisbehandlung abgeschlossen ist, wird das Ereignisobjekt bereinigt und zur Wiederverwendung im nächsten Ereignis an den Ereignispool zurückgegeben.

Vorteile des Event-Poolings:

  • Reduzierte Speicherzuweisung: Durch die Wiederverwendung von Ereignisobjekten vermeidet React häufige Speicherzuweisungs- und Garbage-Collection-Vorgänge, was die Leistung erheblich verbessern kann, insbesondere bei hochfrequenten Ereignissen wie Mausbewegungen oder Scrollen.

Lebenszyklus synthetischer Ereignisse

Aufgrund des Event-Poolings unterscheidet sich der Lebenszyklus synthetischer Events von dem nativer Events. Normalerweise werden die Eigenschaften des synthetischen Ereignisobjekts nach Abschluss der Ausführung der Ereignishandlerfunktion auf Null zurückgesetzt, damit es zur Wiederverwendung an den Pool zurückgegeben werden kann.

Hinweise:

Asynchrone Vorgänge: Wenn Sie innerhalb eines asynchronen Vorgangs auf das Ereignisobjekt zugreifen müssen, müssen Sie die Methode event.persist() aufrufen. Dadurch wird verhindert, dass das Ereignisobjekt an den Pool zurückgegeben wird, und sichergestellt, dass es während des asynchronen Vorgangs nicht zurückgesetzt wird.

API und Verwendung synthetischer Ereignisse

Die React Synthetic Event API bietet eine Reihe von Schnittstellen ähnlich den nativen Browserereignissen, die häufig in React verwendet werden. Nachfolgend finden Sie eine detaillierte Einführung in einige häufig verwendete Methoden und Eigenschaften sowie Beispiele, die deren Verwendungsszenarien veranschaulichen.

a. präventDefault()

Die Methode „preventDefault()“ wird verwendet, um das Standardverhalten eines Ereignisses zu verhindern. Das Standardverhalten bezieht sich auf die Aktionen, die der Browser normalerweise ausführt, wenn ein Ereignis eintritt, z. B. das Aktualisieren der Seite, wenn ein Formular gesendet wird, oder das Navigieren zu einer neuen Seite, wenn auf einen Link geklickt wird.

Beispiel: Verhindern des standardmäßigen Formularübermittlungsverhaltens

function MyForm() {
  const handleSubmit = e => {
    e.preventDefault(); // Prevent the default form submission behavior
    console.log('Form submission prevented');
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" name="name" />
      <button type="submit">Submit</button>
    </form>
  );
}

Nach dem Login kopieren

Wenn in diesem Beispiel „preventDefault()“ nicht aufgerufen wird, wird durch Klicken auf die Schaltfläche „Senden“ die Formularübermittlung ausgelöst, wodurch die Seite aktualisiert wird. Durch den Aufruf von „preventDefault()“ wird das Standardverhalten verhindert, sodass Sie stattdessen die Formularverarbeitungslogik anpassen können.

b. stopPropagation()
Die Methode stopPropagation() wird verwendet, um die weitere Ausbreitung eines Ereignisses zu stoppen. Ereignisse breiten sich typischerweise vom Zielelement, in dem das Ereignis ausgelöst wurde, bis zu seinen übergeordneten Elementen aus (Ereignis-Bubbling). Durch den Aufruf von stopPropagation() können Sie diese Ausbreitung verhindern.

Beispiel: Stoppen der Ausbreitung eines Klickereignisses

function Parent() {
  const handleParentClick = () => {
    console.log('Parent clicked');
  };

  return (
    <div onClick={handleParentClick}>
      Parent Div
      <Child />
    </div>
  );
}

function Child() {
  const handleChildClick = e => {
    e.stopPropagation(); // Stop the event from bubbling up to the parent element
    console.log('Child clicked');
  };

  return <button onClick={handleChildClick}>Click Me</button>;
}

Nach dem Login kopieren

In diesem Beispiel löst das Klicken auf die Schaltfläche den Click-Event-Handler in der Child-Komponente aus. Standardmäßig würde das Ereignis zur übergeordneten Komponente übergehen und auch deren Click-Handler auslösen. Durch den Aufruf von stopPropagation() in der untergeordneten Komponente wird jedoch verhindert, dass das Ereignis an die übergeordnete Komponente weiterleitet.

c. target
The target property refers to the actual DOM element that triggered the event. It is commonly used to access the element that initiated the event and to handle logic related to that element.

*Example: Accessing the element that triggered the event *

function MyComponent() {
  const handleClick = e => {
    console.log('Clicked element:', e.target);
  };

  return (
    <div onClick={handleClick}>
      <button>Button 1</button>
      <button>Button 2</button>
    </div>
  );
}

Nach dem Login kopieren

In this example, when either button is clicked, the e.target in the handleClick function will point to the button element that was clicked. The target property is used to identify which specific element was clicked.

d. currentTarget
The currentTarget property refers to the DOM element to which the event handler is bound. During event handling, regardless of which child element the event bubbles to, currentTarget always points to the element that the event handler is attached to.

Example: Distinguishing between target and currentTarget

function MyComponent() {
  const handleClick = e => {
    console.log('Clicked element:', e.target);
    console.log('Event handler bound to:', e.currentTarget);
  };

  return (
    <div onClick={handleClick}>
      <button>Button 1</button>
      <button>Button 2</button>
    </div>
  );
}

Nach dem Login kopieren

In this example, when any button is clicked, event.target will point to the button that was clicked, while event.currentTarget will always point to the parent div element where the event handler is bound.

e. persist()
The persist() method is used to retain the event object, preventing React from reusing it. This method is typically needed in asynchronous operations.

Example: Using the event object in an asynchronous operation

function MyComponent() {
  const handleClick = e => {
    e.persist(); // Retain the event object

    setTimeout(() => {
      console.log('Button clicked:', event.target);
    }, 1000);
  };

  return <button onClick={handleClick}>Click Me</button>;
}

Nach dem Login kopieren

In this example, because the event object might be reused in asynchronous operations, persist() is called to retain the event object, ensuring that the event properties can be safely accessed in the setTimeout callback.

React Synthetic Event Types

React provides various types of synthetic events that cover common user interaction scenarios. Below are some commonly used synthetic event types along with examples:

a. Mouse Events

  • onClick: Triggered when an element is clicked.

  • onDoubleClick: Triggered when an element is double-clicked.

  • onMouseDown: Triggered when a mouse button is pressed down on an element.

  • onMouseUp: Triggered when a mouse button is released on an element.

  • onMouseMove: Triggered when the mouse is moved over an element.

  • onMouseEnter: Triggered when the mouse pointer enters the element's area; does not bubble.

  • onMouseLeave: Triggered when the mouse pointer leaves the element's area; does not bubble.

Example: Using onClick and onMouseMove

function MouseTracker() {
  const handleMouseMove = e => {
    console.log(`Mouse position: (${e.clientX}, ${e.clientY})`);
  };

  return (
    <div onMouseMove={handleMouseMove} style={{ height: '200px', border: '1px solid black' }}>
      Move your mouse here
    </div>
  );
}

function MyApp() {
  return (
    <div>
      <button onClick={() => console.log('Button clicked!')}>Click Me</button>
      <MouseTracker />
    </div>
  );
}

Nach dem Login kopieren

In this example, the MouseTracker component logs the mouse position whenever it moves within the div area, while the button in the MyApp component logs a message when clicked.

b. Keyboard Events

  • onKeyDown: Triggered when a key is pressed down on the keyboard.

  • onKeyUp: Triggered when a key is released on the keyboard.

  • onKeyPress: Triggered when a key is pressed and held down (deprecated; it is recommended to use onKeyDown instead).

Example: Handling the onKeyDown Event

function KeyHandler() {
  const handleKeyDown = e => {
    console.log('Key pressed:', e.key);
  };

  return <input type="text" onKeyDown={handleKeyDown} placeholder="Press any key" />;
}

Nach dem Login kopieren

In this example, when the user presses any key while focused on the input field, the handleKeyDown function logs the name of the pressed key.

c. Focus Events

  • onFocus: Triggered when an element gains focus.

  • onBlur: Triggered when an element loses focus.

Example: Handling onFocus and onBlur Events

function FocusExample() {
  return (
    <input
      onFocus={() => console.log('Input focused')}
      onBlur={() => console.log('Input blurred')}
      placeholder="Focus and blur me"
    />
  );
}

Nach dem Login kopieren

In this example, when the input field gains or loses focus, a corresponding message is logged to the console.

d. Form Events

  • onChange: Triggered when the value of a form control changes.

  • onSubmit: Triggered when a form is submitted.

  • onInput: Triggered when the user inputs data (including actions like deleting or pasting).

Example: Handling onChange and onSubmit Events

function MyForm() {
  const [value, setValue] = React.useState('');

  const handleChange = e => {
    setValue(e.target.value);
  };

  const handleSubmit = e => {
    e.preventDefault();
    console.log('Form submitted with value:', value);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" value={value} onChange={handleChange} />
      <button type="submit">Submit</button>
    </form>
  );
}

Nach dem Login kopieren

In this example, as the user types into the input field, the handleChange function updates the component's state. When the form is submitted, the handleSubmit function logs the current value of the input field.

Differences Between React Events and Regular HTML Events

a. Event Naming

  • Native: All lowercase (e.g., onclick).

  • React: CamelCase (e.g., onClick).

b. Event Handler Syntax

  • Native events use strings to specify event handlers.

  • React events use functions as event handlers.

c. Preventing Default Browser Behavior

  • Native: can use 'return false' to prevent the browser's default behavior.

  • React: Instead, you must explicitly call preventDefault() to achieve this.

d. Reihenfolge der Ereignisausführung
Zuerst werden native Ereignisse ausgeführt, gefolgt von synthetischen Ereignissen. Synthetische Ereignisse sprudeln auf und werden an das Dokument gebunden. Daher ist es ratsam, die Vermischung nativer und synthetischer Ereignisse zu vermeiden. Wenn ein natives Ereignis die Weitergabe stoppt, kann es die Ausführung des synthetischen Ereignisses verhindern, da synthetische Ereignisse darauf angewiesen sind, zur Ausführung an das Dokument heranzusprudeln.

Warum wählt React synthetische Ereignisse?

Zu den Gründen, warum React synthetische Ereignisse wählt, gehören:

  • Browserübergreifende Konsistenz: Synthetische Ereignisse abstrahieren die Unterschiede in der Ereignisbehandlung in verschiedenen Browsern und sorgen so für konsistentes Verhalten in allen Browsern.

  • Leistungsoptimierung: Ereignisdelegation und Ereignispooling reduzieren den Aufwand für die Ereignisverarbeitung erheblich und verbessern die Leistung der Anwendung.

  • Besseres Ereignismanagement: Mit synthetischen Ereignissen kann React die Ereignisausbreitung effektiver steuern, Standardverhalten verhindern und sich für eine effizientere Ereignisbehandlung eng in den Batch-Update-Mechanismus von React integrieren.

Das obige ist der detaillierte Inhalt vonReact: Das Ereignissystem von React verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1667
14
PHP-Tutorial
1273
29
C#-Tutorial
1255
24
JavaScript -Engines: Implementierungen vergleichen JavaScript -Engines: Implementierungen vergleichen Apr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Von C/C nach JavaScript: Wie alles funktioniert Von C/C nach JavaScript: Wie alles funktioniert Apr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript und das Web: Kernfunktionalität und Anwendungsfälle JavaScript und das Web: Kernfunktionalität und Anwendungsfälle Apr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

JavaScript in Aktion: Beispiele und Projekte in realer Welt JavaScript in Aktion: Beispiele und Projekte in realer Welt Apr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Verständnis der JavaScript -Engine: Implementierungsdetails Verständnis der JavaScript -Engine: Implementierungsdetails Apr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python gegen JavaScript: Community, Bibliotheken und Ressourcen Python gegen JavaScript: Community, Bibliotheken und Ressourcen Apr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Python vs. JavaScript: Entwicklungsumgebungen und Tools Python vs. JavaScript: Entwicklungsumgebungen und Tools Apr 26, 2025 am 12:09 AM

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

See all articles