Beforeunload on a React component

Articles|HÃ¥kon Underbakke | about 4 years ago

Say you want to warn users before closing the page, but only when a specific component is loaded, here’s what to do:

import React, { useEffect } from "react";

const WrapperWithBeforeUnload = ({
  msg = 'Please reconsider before closing this page',
  children
}) => {

  const beforeUnloadHandler = (e) => {
    e.preventDefault();
    return e.returnValue = msg;
  }

  useEffect(() => {
    window.addEventListener("beforeunload", beforeUnloadHandler);
    return () => window.removeEventListener("beforeunload", beforeUnloadHandler);
  }, []);

  return children || <React.Fragment />;
}