Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
react-key-handler
Advanced tools
React component to handle keyboard events (such as keyup
, keydown
& keypress
).
“Happy to see that react-key-handler is SSR safe :+1:”[Veselin Todorov](https://github.com/vesln), Chai.js core
$ npm install react-key-handler --save
You can use react-key-handler
library in two flavours:
This library includes two similar higher-order components, but with a different puprose:
Higher-order Component | Purpose |
---|---|
keyHandler | Handles key changes |
keyToggleHandler | Handles key toggles |
Both have the same API and will decorate the given component with a keyValue
, code
and keyCode
property.
Internally the KeyHandler
component is used, for a full understanding be sure to
check out the implementation.
import React from 'react';
import { keyHandler, KEYPRESS } from 'react-key-handler';
function Demo({ keyValue }) {
return (
<div>
{keyValue === 's' && (
<ol>
<li>hello</li>
<li>world</li>
</ol>
)}
</div>
);
}
export default keyHandler({ keyEventName: KEYPRESS, keyValue: 's' })(Demo);
The prop types of the KeyHandler
component are:
Name | Type | Required | Default | |
---|---|---|---|---|
keyEventName | string | no | 'keyup' | 'keydown' , 'keypress' or 'keyup' |
keyValue | string | yes * | Any given KeyboardEvent.key | |
code | string | yes * | Any given KeyboardEvent.code | |
keyCode† | number | yes * | Any given KeyboardEvent.keyCode |
* You should pass at least one of these props.
† Note that the keyCode is frequently browser specific and has therefore be set as deprecated, see MDN for details.
import React from 'react';
import KeyHandler, { KEYPRESS } from 'react-key-handler';
export default class Demo extends React.Component {
state = { showMenu: false };
render() {
const { showMenu } = this.state;
return (
<React.Fragment>
<KeyHandler
keyEventName={KEYPRESS}
keyValue="s"
onKeyHandle={this.toggleMenu}
/>
{showMenu && (
<ol>
<li>hello</li>
<li>world</li>
</ol>
)}
</React.Fragment>
);
},
toggleMenu = (event) => {
event.preventDefault();
this.setState({ showMenu: !this.state.showMenu });
};
}
The prop types of the KeyHandler
component are:
Name | Type | Required | Default | |
---|---|---|---|---|
keyEventName | string | no | 'keyup' | 'keydown' , 'keypress' or 'keyup' |
keyValue | string | yes * | Any given KeyboardEvent.key | |
code | string | yes * | Any given KeyboardEvent.code | |
keyCode† | number | yes * | Any given KeyboardEvent.keyCode | |
onKeyHandle | function | yes | Function that is called when they key is handled |
* You should pass at least one of these props.
† Note that the keyCode is frequently browser specific and has therefore be set as deprecated, see MDN for details.
This library does not handle key events for form elements such as <input />
and <textarea />
.
React does a fine job supporting these already via keyboard events.
TODO: explain the differences between the different key events.
keyValue
, code
and keyCode
The three available key events are
keyValue
This corresponds to the true value. This is the value of the key pressed
by the user while taking into considerations the state of modifier keys
such as the shiftKey
as well as the keyboard locale/layoutcode
This corresponds to the physical key on the keyboard (as opposed to the
character generated by pressing the key). In other words, this property
returns a value which isn't altered by keyboard layout or the state of
the modifier keys. The value is a string specific to the key, e.g. 'Digit0'keyCode
This is similar to code but numeric and also deprecated.We recommend you to use the new Web standard KeyboardEvent.key or the KeyboardEvent.code over the deprecated KeyboardEvent.keyCode.
Note that in React key
is a reserved property, and thus we use keyValue
when referring
to the key
property.
Browser support:
There's no need to worry about browser support because internally we normalize
deprecated HTML5 keyValue
values and translate from legacy keyCode
values,
similar to how React does this for their SyntheticKeyboardEvent
.
More information:
$ git clone <this repo>
$ cd react-key-handler
$ npm install
To start the server:
$ npm demo
This starts a development server, which will automatically rebuild the demo app as you change files and supports hot module replacement for fast development:
$ open http://localhost:1234
To run all tests:
$ npm test
Or you can run the linters, unit tests and check for type errors individually:
$ npm run test:lint
$ npm run test:unit
$ npm run test:flow
Bug reports and pull requests are welcome on GitHub. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
_________________
< The MIT License >
-----------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
[1.2.0-beta.3] - 2018-08-30
FAQs
React component to handle keyboard events
The npm package react-key-handler receives a total of 1,888 weekly downloads. As such, react-key-handler popularity was classified as popular.
We found that react-key-handler 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
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.