You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

21 lines
460 B

5 years ago
5 years ago
5 years ago
  1. import {useEffect} from "react";
  2. export default function useKey(keyName, callback) {
  3. useEffect(() => {
  4. const keys = Array.isArray(keyName) ? keyName : [keyName];
  5. const handler = function (ev) {
  6. if (keys.includes(ev.key)) {
  7. if (callback()) {
  8. ev.preventDefault();
  9. }
  10. }
  11. };
  12. window.addEventListener("keydown", handler);
  13. return () => {
  14. window.removeEventListener("keydown", handler);
  15. }
  16. })
  17. }