【发布时间】:2021-06-12 14:47:07
【问题描述】:
我正在构建一个 react 应用程序,它允许用户复制和粘贴文本(从一个输入字段到另一个输入字段)以及复制列表中的列表项。
现在我想支持这两种用例的键盘快捷键。我尝试使用MouseTrap(也尝试hotkeys)覆盖默认行为,只要我只复制文本或列表项,它就可以正常工作。但我还没有设法支持上下文感知复制粘贴。我希望复制命令在列表项获得焦点时复制列表项(或鼠标光标在列表区域内),并在列表未获得焦点时复制文本。
让事情变得更糟的是:我的页面没有项目列表,所以我只想拥有默认的复制粘贴文本行为。
我尝试了以下方法:
- 在 App 组件的 componentDidMount 中挂接热键
- 在 ListView 组件的 componentDidMount 中挂接热键
当我按下 ctrl+c 时,两个组件都会触发事件,即使我返回 false(这应该会阻止事件冒泡),它也会在两个组件中触发。 我做错了什么?
// ListView.js
componentDidMount() {
hotkeys('cmd+c,cmd+v', 'TestView', this.onHotKey)
}
onHotKey = (event, handler) => {
switch (handler.key) {
case 'cmd+c':
console.log('Testview: COPY!')
break
case 'cmd+v':
console.log('Testview: PASTE!')
break
}
event.preventDefault()
return false
}
// App.js
componentDidMount = () => {
hotkeys('cmd+c,cmd+v', this.onHotKey);
}
onHotKey = (event, handler) => {
switch (handler.key) {
case 'cmd+c': console.log('App: COPY!')
break;
case 'cmd+v': console.log('App: PASTE!')
break;
}
}
【问题讨论】:
标签: javascript reactjs hotkeys