在 Web 应用程序中管理键盘快捷键有点棘手。
考虑一个Widget
组件。
我希望能够基于键盘快捷键聚焦某些元素,并在该组件上运行功能。
class Widget extends React.Component {
componentDidMount() {
this.setBindings()
},
componentWillUnmount() {
this.removeBindings();
}
}
setBindings 和 removeBindings,将使用诸如mousetrap之类的库来绑定特定的键盘快捷键
现在,上述解决方案存在两个问题:
- 它使键盘快捷键行为不可预测
- 考虑安装两个小部件的情况,一个会覆盖另一个
- 小部件与快捷方式紧密耦合——现在如果有人不想使用快捷方式,他们必须在
Widget
. 这破坏了代码的“粒度”——理想情况下,用户应该能够使用 Widget,然后是 WidgetWithShortcuts,或者类似的东西
另一个潜在的解决方案是传递一个实例
const widgetShortcuts = (widgetInstance) => {
return {
'ctrl i': () => widgetInstance.focusInput(),
}
}
第二种解决方案的问题是:
widgetInstance 将不得不公开许多可公开访问的方法,例如 focusSomeThing 或 invokeProp 等
如果
Widget
想要有一些工具提示,在某些地方显示键盘快捷键,则有关键盘快捷键的信息将在不同的地方重复。可以在一个地方更改快捷方式,而在另一个地方忘记这样做
是否有最佳实践,或者关于如何通过解决上述问题来实现键盘快捷键的一些想法?