Как повесить обработчик событий onKeyPress на body в react typescript?

Хочу, что-бы при клике на клавишу Enter я открывал свой dropdown. Для этого как я понимаю нужно повесить обработчик событий на body.Как это сделать? Хочу просто менять state на true при клике на Enter. Мой dropdoan


Ответы (1 шт):

Автор решения: p1uton

В useEffect добавить слушатель события на document (только нужно использовать событие keydown вместо keypress):

import { useEffect, useState } from "react";

export default function App() {
  const [isActive, setIsActive] = useState(false);

  const handleKeyDown = (e: KeyboardEvent) => {
    if (e.key === "Enter") {
      setIsActive((prev) => !prev);
    }
  };

  useEffect(() => {
    document.addEventListener("keydown", handleKeyDown);
    return () => {
      document.removeEventListener("keydown", handleKeyDown);
    };
  }, []);

  return <div>Press Enter: {isActive ? "active" : "not active"}</div>;
}

Ссылка на рабочий пример

→ Ссылка