我有一个使用React/Redux编写的鼓应用程序,它已经完全可以使用,但是我希望在按下相应的键时能够应用活动按钮样式,就像在物理上点击按钮时一样。目前,点击按钮会进行转换,但输入相应的键只会播放音频文件,与按钮没有真正的关联。是否有一种方法可以在按键时标记相应的按钮为活动状态?
这是我的CodeSandbox: https://codesandbox.io/s/k29r3928z7
这是我的CodeSandbox: https://codesandbox.io/s/k29r3928z7
这是一个使用ref的完美案例(正如文档所说,不要滥用它)。
对于每个按钮,您需要一个指向DOM元素的“引用(ref)”。当您按下一个键并在json中找到其代码时,将访问相应的按钮引用并触发“focus”方法,以指示UI该按钮已被按下。
您的按钮定义应类似于以下内容:
{drumObj.map(x => (
<button
className="drum-pad"
ref={"drumButton" + x.trigger}
key={x.id}
id={x.id}
onClick={() => drumHit(x.url, x.id)}
> ...
handleKeyPress = event => {
const drumKey = drumObj.find(obj => obj.keyCode === event.keyCode);
if (drumKey) {
this.refs["drumButton" + drumKey.trigger].focus();
this.props.drumHit(drumKey.url, drumKey.id);
}
};
实际上我会用以下内容替换对this.props.drumHit(...)的调用:
this.refs["drumButton" + drumKey.trigger].click();
handleKeyPress = event => {
const drumKey = drumObj.find(obj => obj.keyCode === event.keyCode);
if (drumKey) {
this.refs["drumButton" + drumKey.trigger].click();
this.refs["drumButton" + drumKey.trigger].focus();
}
};
我希望它有所帮助!
问候, Max。