MCPcopy
hub / github.com/alibaba/hooks / useKeyPress

Function useKeyPress

packages/hooks/src/useKeyPress/index.ts:238–277  ·  view source on GitHub ↗
(
  keyFilter: KeyFilter,
  eventHandler: (event: KeyboardEvent, key: KeyType) => void,
  option?: Options,
)

Source from the content-addressed store, hash-verified

236const defaultEvents: KeyEvent[] = ['keydown'];
237
238function useKeyPress(
239 keyFilter: KeyFilter,
240 eventHandler: (event: KeyboardEvent, key: KeyType) => void,
241 option?: Options,
242) {
243 const { events = defaultEvents, target, exactMatch = false, useCapture = false } = option || {};
244 const eventHandlerRef = useLatest(eventHandler);
245 const keyFilterRef = useLatest(keyFilter);
246
247 useDeepCompareEffectWithTarget(
248 () => {
249 const el = getTargetElement(target, window);
250 if (!el) {
251 return;
252 }
253
254 const callbackHandler = (event: Event) => {
255 const keyEvent = event as KeyboardEvent;
256 const genGuard = genKeyFormatter(keyFilterRef.current, exactMatch);
257 const keyGuard = genGuard(keyEvent);
258 const firedKey = isValidKeyType(keyGuard) ? keyGuard : keyEvent.key;
259
260 if (keyGuard) {
261 return eventHandlerRef.current?.(keyEvent, firedKey);
262 }
263 };
264
265 for (const eventName of events) {
266 el?.addEventListener?.(eventName, callbackHandler, useCapture);
267 }
268 return () => {
269 for (const eventName of events) {
270 el?.removeEventListener?.(eventName, callbackHandler, useCapture);
271 }
272 };
273 },
274 [events],
275 target,
276 );
277}
278
279export default useKeyPress;

Callers 9

demo1.tsxFile · 0.85
demo3.tsxFile · 0.85
demo4.tsxFile · 0.85
demo6.tsxFile · 0.85
demo5.tsxFile · 0.85
demo7.tsxFile · 0.85
demo8.tsxFile · 0.85
demo2.tsxFile · 0.85
index.spec.tsxFile · 0.85

Calls 3

getTargetElementFunction · 0.90
useLatestFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…