Skip to content

useKeyPressEvent

在指定键被按下松开时分别触发对应的回调函数。

签名

ts
function useKeyPressEvent(
  key: KeyFilter,
  keydown?: Handler | null,
  keyup?: Handler | null,
): void

参数

参数类型默认值说明
keyKeyFilter要监听的键(同 useKey
keydownHandler | nullundefined按下时的回调
keyupHandler | nullundefined松开时的回调

keydownkeyup 均为可选,可以只传其中一个。

基本用法

tsx
import { useKeyPressEvent } from '@piant/hooks';

export function MyComponent() {
  useKeyPressEvent(
    'Shift',
    () => console.log('Shift 按下'),
    () => console.log('Shift 松开'),
  );

  return <View />;
}

只监听按下

tsx
useKeyPressEvent('Enter', () => submit());

只监听松开

tsx
useKeyPressEvent('Space', null, () => releaseCharge());

结合状态实现长按检测

tsx
const [holding, setHolding] = createState(false);

useKeyPressEvent(
  ' ',
  () => setHolding(true),  // keydown
  () => setHolding(false), // keyup
);

return <Text>{holding() ? '长按中…' : '未按下'}</Text>;

useKey 的区别

特性useKeyuseKeyPressEvent
事件类型可配置(keydown / keyup分别注册 keydown 和 keyup
用法单一回调两个独立回调
适合场景单一事件响应需要同时处理按下与松开

自动清理

useKey 相同,监听器在响应式 Owner 销毁时自动移除。

另见

Released under the MIT License.