我有一个使用反应钩子注册热键的组件:useMousetrap。
这是捕鼠器库的钩子包装器。
这是组件:
const MyComponent = ({ name }) => {
const sayHi = () => {
alert(`Hello from Component ${name}`);
};
useMousetrap('x', sayHi);
return (
<div>
Component {name}
</div>
);
};
当我在其他组件或页面中实现该组件时,一切正常。但现在说我想在同一页面上有两个组件:
<div>
<MyComponent name="A" />
<MyComponent name="B" />
</div>
现在两个组件都尝试注册热键。似乎总是在文档流中稍后出现的那个成功。因此,如果我在上面的示例中按下x
,警报会显示Hello from Component B
.
有没有办法确保只有一个组件是曾经的active
?我正在考虑根据视图中的组件注册和取消注册这些热键,但是useMousetrap
作为一个钩子似乎使条件逻辑变得相当困难。我在这里有点困惑。
有没有一种快速简便的方法可以有条件地打开/关闭热键?