
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@react-hook/hotkey
Advanced tools
npm i @react-hook/hotkey
A React hook for invoking a callback when hotkeys are pressed. This hook also
provides interop between event.key and event.which - you provide a string, and
the library turns it into an event.which key code if it has to.
For better TypeScript support, this library doesn't have a special syntax à la
the is-hotkey package. It uses plain JS objects and your build will fail
if you've included a typo.
import * as React from 'react'
import {useHotkey, useHotkeys} from '@react-hook/hotkey'
const OneHotkey = () => {
const ref = React.useRef(null)
const save = () => {}
// creates a hotkey for Command|Control + S keys
useHotkey(ref, ['mod', 's'], save)
return <textarea ref={ref} />
}
const OneHotkeySingleCharacter = () => {
const ref = React.useRef(null)
const exit = () => {}
// creates a hotkey for the escape key
useHotkey(ref, 'esc', exit)
return <textarea ref={ref} />
}
const MultipleHotkeys = () => {
const ref = React.useRef(null)
useHotkeys(
// Hotkey map
[
[['mod', 's'], save],
[['mod', 'p'], print],
['esc', blur],
['enter', submit],
]
)
return <textarea ref={ref} />
}
This is a hook for creating a single hotkey.
| Argument | Type | Required? | Description |
|---|---|---|---|
| target | React.RefObject<T> | T | Window | Document | null | Yes | The React ref, window, or document to add the hotkey to |
| hotkey | Hotkey | Hotkey[] | Yes | When the key and all of the modifiers in a keydown event match those defined here, the callback below will be invoked. See SpecialCodes, Aliases, and Modifiers for possible keys in addition the standard keys. |
| callback | HotkeyCallback | Yes | A callback that takes action on the hotkey event. |
React.MutableRefObject<T>This is a hook for creating multiple hotkeys that respond to a singular keyboard event.
| Argument | Type | Required? | Description |
|---|---|---|---|
| target | React.RefObject<T> | T | Window | Document | null | Yes | The React ref, window, or document to add the hotkey to |
| hotkeyMapping | [Hotkey | Hotkey[], HotkeyCallback][] | Yes | These are the same arguments defined in useHotkey, but in a mapped array form. |
React.MutableRefObject<T>HotkeyCallbacktype HotkeyCallback = (event: KeyboardEvent) => void
Hotkeytype Hotkey =
| keyof SpecialCodes
| keyof Modifiers
| keyof Aliases
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
| 0
| '1'
| '2'
| '3'
| '4'
| '5'
| '6'
| '7'
| '8'
| '9'
| '0'
| 'a'
| 'b'
| 'c'
| 'd'
| 'e'
| 'f'
| 'g'
| 'h'
| 'i'
| 'j'
| 'k'
| 'l'
| 'm'
| 'n'
| 'o'
| 'p'
| 'q'
| 'r'
| 's'
| 't'
| 'u'
| 'v'
| 'w'
| 'x'
| 'y'
| 'z'
SpecialCodesinterface SpecialCodes {
backspace: 8
tab: 9
enter: 13
shift: 16
control: 17
alt: 18
pause: 19
capslock: 20
escape: 27
' ': 32
pageup: 33
pagedown: 34
end: 35
home: 36
arrowleft: 37
arrowup: 38
arrowright: 39
arrowdown: 40
insert: 45
delete: 46
meta: 91
numlock: 144
scrolllock: 145
';': 186
'=': 187
',': 188
'-': 189
'.': 190
'/': 191
'`': 192
'[': 219
'\\': 220
']': 221
"'": 222
f1: 112
f2: 113
f3: 114
f4: 115
f5: 116
f6: 117
f7: 118
f8: 119
f9: 120
f10: 121
f11: 122
f12: 123
f13: 124
f14: 125
f15: 126
f16: 127
f17: 128
f18: 129
f19: 130
f20: 131
}
Aliasesinterface Aliases {
break: 'pause'
cmd: 'meta'
command: 'meta'
ctrl: 'control'
del: 'delete'
down: 'arrowdown'
esc: 'escape'
left: 'arrowleft'
// will respond to the `command` key on a mac and
// to the `control` key everywhere else
mod: 'meta' | 'control'
option: 'alt'
return: 'enter'
right: 'arrowright'
space: ' '
spacebar: ' '
up: 'arrowup'
windows: 'meta'
}
Modifiersinterface Modifiers {
alt: 'altKey'
control: 'ctrlKey'
meta: 'metaKey'
shift: 'shiftKey'
}
Full credit for the key code interop portion goes to Ian Storm Taylor and his library is-hotkey.
MIT
FAQs
A React hook for invoking a callback when hotkeys are pressed
We found that @react-hook/hotkey demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.