javascript - react js如何防止方向键切换控件
问题描述
我正在开发基于浏览器的反应游戏,玩家可以选择一个单位放置在战场上,然后他可以使用箭头键在地图上移动该单位。
问题是单位列表是一个反应单选组,并且按下箭头键也会将焦点从一个单选按钮切换到下一个单选按钮,这会导致通过相同的操作选择不同的单元(并且确实)移动了初始单元,所以整个事情变得非常混乱。
我使用绑定到方法的事件侦听器componentDidMount
来绑定箭头键来移动单元。
componentDidMount(){
...
document.addEventListener("keydown", this.handleKeyDown.bind(this));
document.addEventListener("keyup", this.handleKeyUp.bind(this));
虽然可能有很多方法可以解决这个问题,但我更愿意使用箭头键简单地禁用单选按钮的切换。有谁知道如何关闭它?
我找到了这篇文章,但大部分时间都超出了我的想象,此外我仍然希望有一种更简单的方法来做到这一点。
解决方案
React 建议使用preventDefault
语句而不是使用 return false:
handleKeyDown = (e) => {
//... rest of your code
e.preventDefault()
}
此外,您不需要addEventListener
在 componentDidMount 挂钩内进行绑定。该事件将从event binding
组件调用。
例子:
<YourComponent onKeyDown={this.handleKeyDown} onKeyUp={this.handleKeyUp} />
推荐阅读
- javascript - 条件渲染中的 VueJS 数据列表
- java - 如何存储 2 个值
- rust - 在 VS Code 中调试 rust 应用程序时出现未知错误
- android - HTTPS Android Clent 到服务器连接,无需使用密钥对(公共/私有)的客户端证书
- github - GitHub提交行为相当奇怪
- javascript - 使用 Moment.js 在 JavaScript 中单击按钮时显示新计时器
- html - 导航栏列表项未显示且导航栏未固定在顶部
- algorithm - 日元的 K 最短路径算法 - wiki 伪代码
- r - 按组查找每行日期后满足条件的第一行
- javascript - setTimeout 函数无法正常工作。执行之间没有延迟