在 React 中的按键上应用按钮“活动”样式

2024-04-08

我在 React/Redux 中有一个鼓应用程序,它的功能齐全,但我希望能够在相应的按键按下时应用活动按钮样式,就像我物理单击按钮时一样。就目前情况而言,单击按钮会进行转换,但键入相应的键只会播放音频文件,而不会真正链接到按钮。有没有办法在按键时将相应的按钮标记为活动状态?

这是我的 CodeSandbox:https://codesandbox.io/s/k29r3928z7 https://codesandbox.io/s/k29r3928z7


这是一个完美的用例ref https://reactjs.org/docs/refs-and-the-dom.html(正如文档所说,不要滥用它的使用)。

对于每个按钮,您都需要一个 DOM 元素的“引用”(erence)。当您按下某个键并在 json 中找到其代码时,您将访问该按钮的相应引用并触发“焦点”方法,以指示 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(...) for:

this.refs["drumButton" + drumKey.trigger].click();

这样做的原因是因为如果你改变drumHit将来,您只需在按钮属性定义的 onClick 属性中更新它的方法名称或签名即可。作为一种好的做法,请始终尝试以编程方式模拟此类事件,而不是在代码的不同部分中复制相同的行为。

So your 处理按键方法应该看起来像这样:

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();
   }
};

我希望它有帮助!

问候, 最大限度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React 中的按键上应用按钮“活动”样式 的相关文章

  • 两列表:一列尽可能小,另一列占据其余部分

    我在 div 中有一个 to columns 表 div table tbody tr td class action a a td td class content p Bigger text variable size p td tr
  • React 中的 Reconciliation 详解

    我是 React JS 的新手 谁能准确解释和解是如何运作的 我尝试从 React 官方网站上理解它 但没有得到它 我是这样理解的 您会同意 React 使用组件使事情变得简单且更快 通过 JSX 我们可以让用户定义的组件变得更容易 一天结
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • 如何使使用 css 调整大小的图像在 IE 中看起来不错?

    当使用 css 宽度 高度或属性宽度 高度缩放图像时 IE6 和 IE7 无法很好地缩放网页中的图像 我不确定它默认使用哪种算法 但这不好 在这些浏览器中缩放时 缩放图像会显示锯齿伪影 幸运的是 有一种方法可以通过简单的 css 规则强制
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 如何使用角度材料在具有可扩展行的表格中创建嵌套垫表

    我有以下数据 id c9d5ab1a subdomain wing domain aircraft part id c9d5ab1a info mimetype application json info dependent parent
  • CSS 到底如何计算相对尺寸

    我想更好地理解某些 CSS 行为 这与具体问题无关 我只是在调试网站时遇到的 让我们在固定位置的 div 中放置一个全宽图像 div img style width 100 src https via placeholder com 150
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 为什么我的交互式图像仅在 Internet Explorer 上出现故障?

    我的问题 我为自己制作了一个图像地图 交互式图像 它在 Chrome safari 和 Firefox 上完美运行 然而 当我在可怕的互联网浏览器上尝试它时 它真的很糟糕 这些小点应该扩展到更大的盒子中 在互联网浏览器上它要么不起作用 要么
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 使用 CSS 的响应式图像

    我发现调整图像大小以使其具有响应能力很棘手 我正在开发一个 php 应用程序来自动将网站转换为响应式版本 我有点被图像困住了 我已经成功地为网站上的每个图像添加了一个包装类 并且可以很好地调整图像的大小 我的问题在于自然小于窗口的图像 例如
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u

随机推荐

  • 如何将 firebase 存储中的图像显示到小部件中?

    我想显示保存在的图像firebase storage进入一个显示的小部件profile picture在我的屏幕上 目前我能够得到download url但不确定如何使用该 url 将图像显示到小部件中 这是显示的代码profile pic
  • int 和 long 可以是同一类型吗?

    当然int and long不是保证是相同的类型 但在 Windows 等平台上以 32 位模式编译时 它们恰好具有相同的大小 是编译器allowed将他们视为同一类型 我不确定如何明确测试编译器是否将两种类型视为相同 但我尝试了启发式测试
  • 如何更改文本区域中文本的颜色

    我有一个textarea当我输入某些内容时 某些单词的颜色应该改变 例如 如果键入的文本是下一个 He went to the market to buy an apple 市场 这个词应该变成green 苹果 这个词应该变成red 这是我
  • 添加虚拟消除了错误:类型“base”不是派生类的直接基类

    请考虑下面的示例代码 include
  • 我如何在编译时从 C# 调用未知的本机函数

    在运行时我提供了一个String名称 对象的排序数组以及有关本机函数的一些附加信息 dllpath calltype 等 假设所有信息都在CallInformation Object 我如何调用这个本机函数 笔记 在运行之前我没有提供 dl
  • Visual Studio 2013 - 更改 Peek 定义窗口的背景颜色

    我使用 Visual Studio 2013 Ultimate Resharper 8 和自己的配色方案http studiostyl es http studiostyl es 我想更改查看定义窗口中的背景颜色 因为现在是黄色 也许这导致
  • UIView框架、边界和中心

    我想知道如何以正确的方式使用这些属性 我认为 frame可以从我正在创建的视图的容器中使用 它设置相对于容器视图的视图位置 它还设置该视图的大小 Also center可以从我正在创建的视图的容器中使用 此属性更改视图相对于其容器的位置 最
  • 在 EMR 中引导期间获取“现有锁 /var/run/yum.pid:另一个副本正在作为 pid 运行...”

    我需要在我的 EMR 集群 AMI 3 1 1 中安装 python3 作为引导步骤的一部分 所以我添加了以下命令 sudo yum install y python3 但每次我都会收到以下错误 Existing lock var run
  • 有没有一种简单的方法来打开 Uri 并获取它指向的任何内容? (C#)

    我有一个Uri对象被传递给我的类的构造函数 我想打开文件Uri指向 无论是本地 网络 http 还是其他 并将内容读入字符串 有没有一种简单的方法可以做到这一点 或者我是否必须尝试解决诸如Uri IsFile弄清楚如何尝试打开它 stati
  • 如何使用 Teams Webhooks 发布多行消息?

    我有一个 webhook 设置 可以将消息发布到我们的 Teams 团队频道之一 我正在使用此处给出的团队 Webhook 示例之一 https learn microsoft com en us microsoftteams platfo
  • 推荐的 Ruby 交互式控制台 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Mailkit 或 mimekit 向多个收件人发送一封电子邮件

    请不要将其标记为重复问题 因为该解决方案适用于邮件消息 而不适用于 mailkit 我正在尝试向多个地址发送电子邮件 我尝试使用下面的代码 但我还没有尝试使用循环 var message new MimeMessage message Fr
  • 如何全局禁用 Pylint 特定错误消息?

    我使用 Sublime Text 编辑器和 Pylint 作为 Python 代码解析器 它工作正常 但是每当我定义变量时 我都会收到以下错误消息 C0103 错误 常量名称无效 I read 在这个主题中 https stackoverf
  • 在 Visual Studio 2012 中导入现有源文件

    我想将教程的源代码添加到现有项目中 并且希望将文件从下载到的桌面上的临时文件复制到项目文件夹中 在解决方案资源管理器中单击 源文件 文件夹会引导我进入 添加 gt 现有项目 菜单 然后我可以添加源文件 但是 它不会复制到项目文件夹中 而是保
  • 如何将 Vec 转换为 C 友好的 *mut T?

    我有一个 Rust 库 它返回u8通过 FFI 将数组传递给 C 调用者 该库还可以在客户端使用完数组后处理删除数组的问题 库没有状态 因此客户端需要拥有该数组 直到将其传回库进行释放 Using box from raw and boxe
  • Erlang 生成问题

    我在 erlang 中遇到了 spawn 问题 似乎进程在一段时间后就死掉了 这是简单的代码 module simple export server 1 client 1 owner 1 spawn n 2 start 1 main 1 s
  • javax.xml.bind.JAXBException:不包含 ObjectFactory.class o jaxb.in​​dex

    我有一个 Java Spring Web 应用程序 需要将其用作 SOAP 客户端 我正在使用 Maven 并且有一个包含自定义代码的主模块 WAR 和一个包含 WSDL 我有两个 WSDL 生成的类的子模块 JAR 依赖项 正如您在标题中
  • LsaOpenPolicy 在我的代码中抛出异常。为什么?

    我从新闻组帖子中得到了以下代码 奇怪的是 它在 Delphi 2010 中对我不起作用 LsaOpenPolicy 函数调用时抛出异常 function AddLogonAsAService ID pchar boolean const R
  • 是否可以将批量搜索请求发送到 Google 自定义搜索 API?

    我的应用程序超出了 Google 自定义搜索 API 的限制 在寻求优化我的搜索调用时 我想知道是否有办法批量发送到 API 的搜索请求 我有一些页面 每个用户搜索都会发出多个请求 并且希望将它们批处理为一个 API 调用 我环顾四周 但没
  • 在 React 中的按键上应用按钮“活动”样式

    我在 React Redux 中有一个鼓应用程序 它的功能齐全 但我希望能够在相应的按键按下时应用活动按钮样式 就像我物理单击按钮时一样 就目前情况而言 单击按钮会进行转换 但键入相应的键只会播放音频文件 而不会真正链接到按钮 有没有办法在