useKeyDown
ref
를 전달한 요소가 포커싱된 상태에서 keydown
이벤트 발생 시 keyDownCallbackMap
로 지정한 key
에 트리거되어 콜백 함수를 호출합니다.
keyDownCallbackMap
의 key는 KeyboardEvent.key
가 반환하는 값이 들어가야 합니다.
- 💡 Key values for keyboard events - MDN 을 기반으로 자주 사용되는
KeyboardEvent.key
들은타입 추론
을 지원합니다. 타입 추론되지 않은KeyboardEvent.key
는 직접 입력하셔야 됩니다. - 💡 타입 추론을 위해 제공하는 KeyDownCallbackMap 인터페이스
만약 모든 KeyboardEvent.key
에 대해 콜백 함수를 호출하고 싶다면 allKeyDownCallback
props를 이용 할 수 있습니다.
- 💡 allKeyDownCallback이 존재 할 경우 keyDownCallbackMap으로 지정한 콜백 함수는 무시합니다.
enabled
옵션을 통해 원하는 조건에 keydown 이벤트를 바인딩 할 수 있습니다.
targetRef
가 할당되지 않으면 기본적으로 window
에 이벤트가 바인딩 됩니다.
Code
Interface
typescript
interface UseKeyDownProps {
enabled?: boolean; // default: true
keyDownCallbackMap?: Partial<KeyDownCallbackMap>; // default: {}
allKeyDownCallback?: (event: KeyboardEvent) => void;
}
typescript
function useKeyDown({
enabled,
keyDownCallbackMap,
allKeyDownCallback,
}: UseKeyDownProps): RefObject<Window>;
function useKeyDown<T extends HTMLElement>({
enabled,
keyDownCallbackMap,
allKeyDownCallback,
}: UseKeyDownProps): RefObject<T>;
function useKeyDown<T extends HTMLElement>({
enabled,
keyDownCallbackMap,
allKeyDownCallback,
}: UseKeyDownProps): RefObject<Window | T>
Usage
AllKeyDownCallback
- 모든 키가 눌렸을 때 호출될 공통 콜백 함수입니다.
typescript
import { useKeyDown } from '@modern-kit/react';
const Example = () => {
const targetRef = useKeyDown<HTMLButtonElement>({
enabled: true, // default: true
allKeyDownCallback: (event) => console.log('All Key', event.key)
});
return <button ref={targetRef}>버튼</button>;
};
KeyDownCallbackMap
- 특정 키에 해당하는 콜백을 매핑하고, 해당 키가 눌렸을 때 호출될 콜백 함수들을 호출합니다.
typescript
import { useKeyDown } from '@modern-kit/react';
const Example = () => {
const targetRef = useKeyDown<HTMLButtonElement>({
enabled: true, // default: true
keyDownCallbackMap: {
Enter: (event) => console.log('Enter', event.key),
Shift: (event) => console.log('Shift', event.key),
' ': (event) => console.log('Space', event.key),
}
});
return <button ref={targetRef}>버튼</button>;
};