expo-key-event
Version:
Provides an interface for reading key events such as from external bluetooth keyboards on Android, iOS and Web.
48 lines (40 loc) • 1.09 kB
text/typescript
import { useCallback, useEffect, useState } from "react";
import { KeyPressEvent } from "../ExpoKeyEvent.types";
/**
*
* @param listenOnMount Pass 'false' to prevent automatic key event listening
* - Use startListening/stopListening to control the listener manually
* @returns
*
*/
export function useKeyEvent(listenOnMount = true) {
const [keyEvent, setKeyEvent] = useState<KeyPressEvent | null>(null);
const onKeyDown = useCallback((event: KeyboardEvent) => {
setKeyEvent({ key: event.code });
}, []);
const startListening = useCallback(
() => addEventListener("keydown", onKeyDown),
[onKeyDown],
);
const stopListening = useCallback(
() => removeEventListener("keydown", onKeyDown),
[onKeyDown],
);
useEffect(() => {
if (listenOnMount) startListening();
return () => {
stopListening();
};
}, [listenOnMount, startListening, stopListening]);
return {
/**
* Start listening for key events
*/
startListening,
/**
* Stop listening for key events
*/
stopListening,
keyEvent,
};
}