create-next-app@13.4.19 で初期コードを生成後、実現したいフックを書いてみました。
保存のショートカットキーで、指定した処理を実行するフック
Mac なら Command + S、Mac でなければ CTRL + S で指定した処理を実行します。
"use client"
import { useEffect } from 'react';
export default function useSaveKey(saveFunc: ()=> void) {
useEffect(() => {
function onKeyDown(e: KeyboardEvent) {
const isMac = window.navigator.userAgent.indexOf("Mac") !== -1;
const isCtrl = isMac ? e.metaKey : e.ctrlKey;
if (e.key === 's' && isCtrl) {
e.preventDefault();
saveFunc();
}
}
document.addEventListener('keydown', onKeyDown);
return () => document.removeEventListener("keydown", onKeyDown)
}, [saveFunc])
}
使用例
初期で生成された page.tsx に追加してみた。
"use client"
import Image from 'next/image'
import useSaveKey from './useSaveKey';
export default function Home() {
useSaveKey(() => console.log('save.'));
return (
(以下略)
アップデートに期待するライブラリ
useKeyPress というフックがあったので試しましたが、動作しませんでした。
動作環境によって Command か CTRL かを変えられるかも不明ですが。
コメント