A hook which allows to setup callbacks on multiple keypresses at the same time

Downloads in past


2,81584.11.22 years ago4 years agoMinified + gzip package size for @rooks/use-keys in KB



Note: Future updates to this package have moved to the main package rooks. All hooks now reside in a single package which you can install using

npm install rooks

yarn add rooks

Rooks is completely treeshakeable and if you use only 1 of the 50+ hooks in the package, only that hook will be bundled with your code. Your bundle will only contain the hooks that you need. Cheers!
Build Status


A hook which allows to setup callbacks when a combination of keys are pressed at the same time.
An important difference between useKey and useKeys is that useKey checks if EITHER of the keys in the list is pressed, while useKeys checks if ALL of the keys in the list are active.


npm install --save @rooks/use-keys

Importing the hook

import useKeys from "@rooks/use-keys";


function Demo() {
  const containerRef = React.useRef(document);
  const inputRef = React.useRef(null);
  const [isEventActive, setIsEventActive] = React.useState(true);
  const [firstCallbackCallCount, setFirstCallbackCallCount] = React.useState(0);
    ["ControlLeft", "KeyS"],
    () => {
      alert("you presses ctrlLeft + s");
      setFirstCallbackCallCount(firstCallbackCallCount + 1);
      target: containerRef,
      when: isEventActive
    ["m", "r"],
    event => {
      // event.stopPropagation();
      console.log("here you go m and r");
      when: isEventActive,
      target: inputRef
  return (
    <div data-testid="container">
      <p data-testid="first-callback">
        Callback Run Count:
      <p>Is events enabled ? ==> {isEventActive ? "Yes" : "No"}</p>
      <p>Press CtrlLeft + s to see update in count</p>
        onClick={() => {
        Toggle event enabled
      <div className="grid-container">
        <input ref={inputRef} className="box1" tabIndex={1} />

render(<Demo />);