Einführung
In diesem Lab werden wir den useUnload-Hook in React untersuchen, der es uns ermöglicht, das beforeunload-Fensterereignis (window event) zu behandeln. Das Ziel dieses Labs besteht darin, zu zeigen, wie man diesen Hook verwendet, um eine Callback-Funktion zu erstellen, die ausgelöst wird, wenn der Benutzer versucht, das Fenster zu schließen. Wir werden auch lernen, wie man nach dem Entfernen der Komponente (unmounting) die Bereinigung (cleanup) durchführt. Am Ende dieses Labs werden Sie besser verstehen, wie man Fensterereignisse in React verwaltet.
React useUnload-Hook
index.htmlundscript.jswurden bereits in der virtuellen Maschine (VM) bereitgestellt. Im Allgemeinen müssen Sie nur Code zuscript.jsundstyle.csshinzufügen.
Das beforeunload-Fensterereignis (window event) kann mit folgenden Schritten behandelt werden:
- Erstellen Sie eine Referenz (ref) für die Callback-Funktion
fnmithilfe desuseRef()-Hooks. - Verwenden Sie den
useEffect()-Hook undEventTarget.addEventListener(), um das'beforeunload'-Ereignis zu behandeln, das ausgelöst wird, wenn der Benutzer das Fenster schließen möchte. - Verwenden Sie
EventTarget.removeEventListener(), um die Bereinigung (cleanup) nach dem Entfernen der Komponente (unmounting) durchzuführen.
Hier ist der Code:
const useUnload = (fn) => {
const callbackRef = React.useRef(fn);
React.useEffect(() => {
const callback = callbackRef.current;
window.addEventListener("beforeunload", callback);
return () => {
window.removeEventListener("beforeunload", callback);
};
}, [callbackRef]);
};
const App = () => {
useUnload((e) => {
e.preventDefault();
const exit = confirm("Are you sure you want to leave?");
if (exit) window.close();
});
return <div>Try closing the window.</div>;
};
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
Klicken Sie bitte auf 'Go Live' in der unteren rechten Ecke, um den Web-Service auf Port 8080 auszuführen. Anschließend können Sie die Registerkarte Web 8080 aktualisieren, um die Webseite anzusehen.
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab zum React useUnload-Hook abgeschlossen. Sie können in LabEx weitere Labs üben, um Ihre Fähigkeiten zu verbessern.