Keyboard shortcuts improve user productivity.
Code:
1import { useEffect } from "react";23function useKeyboardShortcut(key: string, callback: () => void, modifiers = {4 ctrl: false,5 shift: false,6 alt: false,7}) {8 useEffect(() => {9 const handler = (e: KeyboardEvent) => {10 if (11 e.key === key &&12 e.ctrlKey === modifiers.ctrl &&13 e.shiftKey === modifiers.shift &&14 e.altKey === modifiers.alt15 ) {16 e.preventDefault();17 callback();18 }19 };2021 document.addEventListener("keydown", handler);22 return () => document.removeEventListener("keydown", handler);23 }, [key, callback, modifiers]);24}2526// Usage27function Editor() {28 const [saved, setSaved] = useState(false);2930 useKeyboardShortcut("s", () => {31 setSaved(true);32 setTimeout(() => setSaved(false), 2000);33 }, { ctrl: true });3435 useKeyboardShortcut("z", () => {36 undo();37 }, { ctrl: true });3839 return (40 <div>41 <p>Press Ctrl+S to save</p>42 {saved && <span>Saved!</span>}43 </div>44 );45}
With hotkey library:
1import { useHotkeys } from "react-hotkeys-hook";23function Editor() {4 useHotkeys("ctrl+s", () => save());5 useHotkeys("ctrl+z", () => undo());6 useHotkeys("ctrl+shift+z", () => redo());78 return <textarea />;9}