https://github.com/arthurtyukayev/use-keyboard-shortcut
A custom hook that allows adding keyboard shortcuts to React applications
https://github.com/arthurtyukayev/use-keyboard-shortcut
browser hooks javascript keyboard keyboard-shortcuts react reactjs shortcuts
Last synced: 2 months ago
JSON representation
A custom hook that allows adding keyboard shortcuts to React applications
- Host: GitHub
- URL: https://github.com/arthurtyukayev/use-keyboard-shortcut
- Owner: arthurtyukayev
- License: mit
- Created: 2019-09-27T17:39:20.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2024-03-17T00:37:52.000Z (about 1 year ago)
- Last Synced: 2025-04-02T22:06:28.499Z (2 months ago)
- Topics: browser, hooks, javascript, keyboard, keyboard-shortcuts, react, reactjs, shortcuts
- Language: JavaScript
- Homepage: https://use-keyboard-shortcut.tyukayev.com/
- Size: 930 KB
- Stars: 53
- Watchers: 2
- Forks: 26
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## useKeyboardShortcut
[](https://badge.fury.io/js/use-keyboard-shortcut) [](https://github.com/arthurtyukayev/use-keyboard-shortcut/actions/workflows/testing.js.yml)
[Documentation | Live Example](https://use-keyboard-shortcut.tyukayev.com/)
A custom React hook that allows adding keyboard shortcuts to a React application.
```javascript
import React from 'react'
import useKeyboardShortcut from 'use-keyboard-shortcut'const App = () => {
const { flushHeldKeys } = useKeyboardShortcut(
["Shift", "H"],
shortcutKeys => console.log("Shift + H has been pressed."),
{
overrideSystem: false,
ignoreInputFields: false,
repeatOnHold: false
}
);return (
Hello World
)
}
```### Documentation
```javascript
const { flushHeldKeys } = useKeyboardShortcut(shortcutArray, callback, options)
```
| Hook Return | Type | Description |
|--------------|-----------|------------|
| `flushHeldKeys` | `Function` | Function to flush the array of held keys used for keydown tracking. This can help fixing "stuck" keys. || Hook Parameter | Type | Description |
|--------------|-----------|------------|
| `shortcutArray` | `Array` | Array of `KeyboardEvent.key` strings. A full list of strings can be seen [here](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) |
| `callback` | `Function` | Function that is called once the keys have been pressed. |
| `options` | `Object` | Object containing some configuration options. [See options section](https://github.com/arthurtyukayev/use-keyboard-shortcut#options) |### Options
A list of possible options to put in the options object passed as the third parameters to the hook.
| Option | Default | Description |
|--------------|-----------|------------|
| `overrideSystem` | `false` | Overrides the default browser behavior for that specific keyboard shortcut. [See caveats section](https://github.com/arthurtyukayev/use-keyboard-shortcut#caveats) |
| `ignoreInputFields` | `true` | Allows enabling and disabling the keyboard shortcuts when pressed inside of input fields. |
| `repeatOnHold` | `true` | Determines whether the callback function should fire on repeat when keyboard shortcut is held down. |#### Caveats
**Flaky System Override Shortcuts**
There are some issues when it comes to overriding default keys such as `Meta`, `Control`, and `Alt` with more than two keys, i.e `Meta + S + F`, these combinations don't work as well as they should due to limitations set by the browsers. They have flaky performance. Using more than two keys in a keyboard shortcut works for keys that don't also handle browser actions such as `Shift + S + F`. However for keyboard shortcuts such as `Meta + S + V` will have flaky performance and some of the events maybe bubble up to the browser and open the browser's save dialog.Some browsers just simply ignore `Event.preventDefault()` when it comes to specific browser actions. For example, on Chrome the shortcut `Meta + S` can be prevented *sometimes* from opening the Save Dialog, however the shortcut `Meta + T` cannot be prevented from opening a new tab. _Results may vary depending on the browser._
Callback behavior or browser behavior that causes a system dialog to appear might perform poorly. During testing, the keyup listener doesn't fire in some browsers if the callback or overriden shortcut resulted in a dialog appearing. For example, creating a shortcut such as `Meta + A` that opens an `alert()`, may sometimes cause the keyup listener to not fire and cause keys to be "stuck".
## Bugs / Problems
[Please create an issue](https://github.com/arthurtyukayev/use-keyboard-shortcut/issues/new).