Was ist in React der Unterschied zwischen onKeyUp und onKeyUpCapture (und onKeyDown/Capture)?

Lesezeit: 3 Minuten

Ich suchte nach Dokumentation und Fragen dazu, war aber überrascht, keine zu finden.

In der Datei React index.d.ts wird Folgendes angezeigt:

// Keyboard Events
onKeyDown?: KeyboardEventHandler<T>;
onKeyDownCapture?: KeyboardEventHandler<T>;
onKeyPress?: KeyboardEventHandler<T>;
onKeyPressCapture?: KeyboardEventHandler<T>;
onKeyUp?: KeyboardEventHandler<T>;
onKeyUpCapture?: KeyboardEventHandler<T>;

Und ich wollte onKeyUp verwenden, aber dann sind mir die beiden Versionen aufgefallen. Was ist der Unterschied zwischen diesem und onKeyUpCapture, und welche Vorteile hat das eine gegenüber dem anderen? Wann würde ich sie verwenden?

  • Beantwortet das deine Frage? onKeyPress Vs. onKeyUp und onKeyDown

    – Adam Strauss

    22. Januar 2020 um 5:56 Uhr

  • @AdamStrauss nein tut mir leid. Ich kenne diese, aber React fügt neue hinzu, die auf “Capture” enden, und ich weiß nicht, was sie tun oder wie sie sich unterscheiden.

    – Mayron

    22. Januar 2020 um 6:05 Uhr

Benutzeravatar von Matin Kajabadi
Matin Kajabadi

Event-Handler in React übergibt eine Instanz von SyntheticEvent, ein Cross-Browser-Wrapper um das native Ereignis des Browsers. Der Begriff capture hat nichts mit React zu tun. Tatsächlich ist es ein Konzept von DOM HTML Event.

Es gibt 3 allgemeine Phasen der Ereignisausbreitung DOM-Ereignisse:

Der Erfassungsphase: Das Ereignisobjekt wird durch die Vorfahren des Ziels vom Fenster zum Elternobjekt des Ziels weitergegeben. (Das Ereignis geht bis zum Element). Sie möchten es kaum in echtem Code verwenden.

Der Zielphase: Das Ereignisobjekt erreicht das Ereignisziel des Ereignisobjekts. Diese Phase wird auch als At-Target-Phase bezeichnet. Wenn der Ereignistyp anzeigt, dass das Ereignis nicht sprudelt, wird das Ereignisobjekt nach Abschluss dieser Phase angehalten.

Der Blasenphase: Das Ereignisobjekt breitet sich in umgekehrter Reihenfolge durch die Vorfahren des Ziels aus, beginnend mit dem Elternobjekt des Ziels und endend mit dem Fenster. Diese Phase wird auch als Sprudelphase bezeichnet.

Ereignisobjekte werden an ein Ereignisziel gesendet. Aber bevor der Versand beginnen kann, muss zunächst der Ausbreitungspfad des Ereignisobjekts bestimmt werden.

Der Ausbreitungspfad ist eine geordnete Liste aktueller Ereignisziele, die das Ereignis durchläuft. Dieser Ausbreitungspfad spiegelt die hierarchische Baumstruktur des Dokuments wider. Das letzte Element in der Liste ist das Ereignisziel, und die vorhergehenden Elemente in der Liste werden als die Vorfahren des Ziels bezeichnet, wobei das unmittelbar vorhergehende Element als das übergeordnete Element des Ziels bezeichnet wird.

ziwvK klickt “>

Wie Sie auf diesem Bild sehen können, zeigt es die Erfassungsphase das beginnt mit dem Fenster, das durch die Vorfahrenkette bis hinunter zum Elementziel geht. Wenn es dann das Zielelement erreicht, wird es dort ausgelöst – Zielphase Und schließlich sprudelt es zu den Vorfahren des Ziels – sprudelnde Phase (hört auf zu sprudeln, wenn Vorfahren vorhanden sind stopPropagation

React gibt Ihnen also die Capture-Phase, indem es sie anhängt onKeyUp welches ist onKeyUpCapture

Beispiel für 3 verschiedene Ausbreitungsphasen

  • Das ist die beste Erklärung, die ich von den drei Phasen gesehen habe. Danke für das. Wann wird also onKeyUpCapture ausgelöst? Ich nehme an, es ist vor onKeyUp, weil onKeyUp nach meinem Verständnis während der Zielphase aufgerufen wird? Tritt onKeyUpCapture auf, sobald das Ziel erfasst wurde? Gibt es einen großen Vorteil, dies zu verwenden, wenn es sofort vor onKeyUp aufgerufen wird, wenn es so funktioniert?

    – Mayron

    22. Januar 2020 um 7:17 Uhr

  • Richtig, wie ich erklärt habe onKeyUpCapture wird zuerst ausgelöst, wenn es aus dem Fenster durch die Vorfahren des Elements kommt. ( kommt drauf an wo du das haben willst). Nachdem es das Ziel erreicht hat, löst es das Ziel aus und schließlich sprudelt es vom Ziel zu seinem Elternteil hoch. Sie würden kaum brauchen Capture in Ihrem Code, es sei denn, es gibt einen Grund, warum Sie etwas behandeln möchten, bevor es das eigentliche Zielelement erreicht, wie z. B. eine komplexe Animation.

    – Matin Kajabadi

    22. Januar 2020 um 7:34 Uhr


  • Danke @MatinKajabadifor für die Beschreibung eines Beispiels dafür, warum jemand daran interessiert sein könnte onKeyUpCapture überhaupt.

    – BradGreens

    22. Januar 2021 um 19:00 Uhr

1445420cookie-checkWas ist in React der Unterschied zwischen onKeyUp und onKeyUpCapture (und onKeyDown/Capture)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy