Rooks
Event Handling

useGlobalObjectEventListener

About

Attach an event listener to window or document and keep the callback fresh across rerenders.

Examples

Listen for window resize events

import { useState } from "react";
import { useGlobalObjectEventListener } from "rooks";

export default function App() {
  const [count, setCount] = useState(0);

  useGlobalObjectEventListener(window, "resize", () =>
    setCount((current) => current + 1)
  );

  return <p>Resize events handled: {count}</p>;
}

Conditionally subscribe to document visibility changes

import { useState } from "react";
import { useGlobalObjectEventListener } from "rooks";

export default function App() {
  const [enabled, setEnabled] = useState(true);
  const [message, setMessage] = useState("Waiting for visibility changes");

  useGlobalObjectEventListener(
    document,
    "visibilitychange",
    () => setMessage(`Document is ${document.visibilityState}`),
    {},
    enabled
  );

  return (
    <div>
      <button onClick={() => setEnabled((current) => !current)}>
        Toggle listener
      </button>
      <p>{message}</p>
    </div>
  );
}

On this page