我想将一些热键绑定到 div:每当用户单击 div 内的某个位置然后按下S
我想要的键时console.log
。但是,我不希望这个热键是全局的并且每次用户按下时都会被触发S
。
这是我到目前为止所得到的:
import React from "react"
import Mousetrap from "mousetrap"
export default class Mouse extends React.Component {
constructor(props) {
super(props)
}
componentDidMount() {
let form = document.querySelector("form")
let m = new Mousetrap(form)
m.bind("s", () => {
console.log("s")
})
}
componentWillUnmount() {
// m.unbind("s", () => {
// console.log("s")
// })
}
render() {
return (
<form
style={{ width: "300px", height: "300px", backgroundColor: "pink" }}
>
<input type="text" />
</form>
)
}
}
捕鼠器文档说我可以像这样绑定我的捕鼠器:
var form = document.querySelector('form');
var mousetrap = new Mousetrap(form);
mousetrap.bind('mod+s', _handleSave);
mousetrap.bind('mod+z', _handleUndo);
正如您在上面的示例中所看到的,这就是我所做的。它确实在这个意义上起作用:每当我S
在input
表单中输入时,console.log
都会触发。但是,我不想使用表单,也不希望我的用户在输入中:我只想让我的用户点击div
. 我无法让它工作。我希望它看起来像这样:
import React from "react"
import Mousetrap from "mousetrap"
export default class Mouse extends React.Component {
constructor(props) {
super(props)
}
componentDidMount() {
let form = document.querySelector(".trigger")
let m = new Mousetrap(form)
m.bind("s", () => {
console.log("s")
})
}
componentWillUnmount() {
// m.unbind("s", () => {
// console.log("s")
// })
}
render() {
return (
<div
className="trigger"
style={{ width: "300px", height: "300px", backgroundColor: "pink" }}
>
Click me!
</div>
)
}
}
但是,这不起作用。什么都没有被触发。
编辑:另外,在上面的第一个示例中我不太明白的一件事是我将 Mousetrap 绑定到form
. 但是,s
只有当我在input field
of 中时才会触发热键form
,但当我只点击form
而不是input
.