在 React 中专注于 div,无需单击即可在模块上启用键盘导航

2024-03-28

我正在 React 中从头开始编写一个图像库,当单击图像时,会弹出一个模式(与我的库组件分开的组件)。我想要使用左右箭头在图片之间导航,不仅仅是屏幕上添加的箭头(onclick),但目前它只关注当我单击一次时的模式,然后我也可以使用键盘导航(onKeyDown)。

我已将 tabIndex="0" 添加到我的 div 中,但我仍然需要单击该 div 一次才能聚焦于它。

<div tabIndex="0" onKeyDown={(event) => this.onKeyNavigation(event, ImageUrl, currentIndex, ImageUrls)}>

onKeyNavigation = (event, ImageUrl, currentIndex, ImageUrls) => {

if ((event.keyCode) === 39) {
    this.props.loadNext(ImageUrl, currentIndex, ImageUrls)
  }
  else if ((event.keyCode) === 37) {
    this.props.loadPrevious(ImageUrl, currentIndex, ImageUrls)
  }
  else if ((event.keyCode) === 27) {
    this.props.onClose()
  }
 }

你需要发射一个focus()事件于<div>您希望在渲染后获得焦点。

最简单的方法是使用 React 的内置生命周期方法。首先,为您想要获得焦点的元素创建一个引用(在本例中为监听 keyDown 事件的 div)。然后,您可以致电focus()在你的组件的那个节点上componentDidMount() method:

class ImageGallery extends React.Component {
    construtor(){
        super();

        // Create the ref in the constructor
        this.focusRef = React.createRef();
    }

    /* your other methods here */

    componentDidMount(){
        // Focus on the rendered div using the DOM focus() method
        this.focusRef.focus();
    }

    render(){
        // Set the ref in your render() method
        return(<div ref={this.focusRef} onKeyDown={this.handle}></div>);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React 中专注于 div,无需单击即可在模块上启用键盘导航 的相关文章

  • 反应。如何将 props 从 onClick 传递到 function

    我是反应新手 我正在尝试创建一个应用程序 在其中我可以单击按钮 并且函数将运行倒计时器 但是如果我从 onClick 传递道具来开始像这样的函数 onClick begin props subject 该函数将在我点击之前运行 如果我在不带
  • 调用 DynamoDB 中的用户数据时渲染得太晚

    所以我试图从dynamoDB 我正在使用一个GraphQL API访问我的数据库 在提供的代码的注释部分中 我提到我已经尝试过users 1 friends map 它确实返回正确的朋友列表数组 但用户似乎直到朋友列表渲染后才被设置 我应该
  • 如何在 ReactJs 中使用 Hooks useState 编写多行状态

    React 16 9 我知道这class component state class JustAnotherCounter extends Component state count 0 相当于使用Hooks useState functi
  • 使用继承的 ES6 React 类时未触发 componentDidMount 方法

    我试图在 React 中使用 ES6 类 并希望所有组件都继承某些方法 但是一旦我尝试扩展扩展 React Component 类的组件 componentDidMount 方法就不会触发 因此什么也不会发生被渲染 我正在使用的代码 基础组
  • JavaScript - 离焦事件?

    我想要做的是显示带有文本颜色的输入字段black 然后 当该人在输入字段内单击时 onfocus 我想将文本颜色更改为red 然后 当该人单击输入字段外部 不再焦点 时 我想将文本颜色更改回black 我知道如何处理 JavaScripto
  • React i18next Backend-Path 在本地和生产环境中不同

    我正在使用一个反应应用程序react i18next并加载翻译i18next xhr backend i18n use Backend use initReactI18next passes i18n down to react i18ne
  • 如何过滤javascript对象数组

    我有两个数组 我正在使用 PubSidebar 过滤基于 groupKey 的内容 let groupKey oaDeal Journals Deposit This array of object will be filtering wi
  • ListView 中的焦点控件

    上下文 我想要一个不会获得焦点的 ListView 例如不会 当用户触摸它时突出显示该行 然而每个行小部件都有它自己的 OnClickListener 这是我在布局 xml 中指定的内容 android choiceMode none an
  • 无法导入@material-ui/core/styles/MuiThemeProvider

    我正在开发一个 React 项目 使用 Material UI React 组件 我想进口MuiThemeProvider in src index js像这样import MuiThemeProvider from material ui
  • 如何删除默认的故事书画布样式?

    Storybook 将默认样式应用于故事画布 iframe 这使得我的故事无法呈现应有的样子 如何摆脱 Storybook 的默认样式 例如 这是默认样式h2元素 通过 Storybook 的 page css 那个的来源page css
  • React Native + Jest EMFILE:打开文件太多错误

    我正在尝试运行 Jest 测试 但收到以下错误 读取文件时出错 Users mike dev react TestTest node modules react native node modules yeoman environment
  • 如何在 ReactJS 中将具有属性的 CSS 转换为 MaterialUI 样式

    我有以下 CSS contentEditable true empty not focus before content attr data text 它允许在内容可编辑的 div 中没有内容时显示占位符 我正在使用 Material UI
  • 这个特定的 ReactJs 代码是如何执行的初学者问题?

    我是初学者 正在阅读大量代码 现在我想知道下面的代码我明白这段代码在做什么 我需要澄清的是代码流程 当我运行它时 我看到图像正在加载 React 是从上到下执行代码吗 占位符图像异步获得正确的图像 但会App如果需要时间 组件会开始渲染但没
  • 如何将 setTimeout 添加到使用 redux 的 fetch Promise 中?

    经过一定的秒数后 如果获取承诺尚未得到解决 我想向用户显示超时错误 我在这里看到了一些添加 setTimeout 来获取的很好的例子 https github com github fetch issues 175 https github
  • 在 React 中禁用 Material-UI 生产 css 类名

    我正在使用 Material UI for React 并且我想在以下情况下禁用它处理类名的方式 NODE ENV production 例如 开发 MuiAppBar root 12 制作 jss12 我希望生产类名称与开发中使用的类相同
  • 如何在 AWS Amplify 上运行 React/Redux 应用程序的代理

    我最近实施了Proxy 在 Express js 中 对于我的反应应用程序发出请求时隐藏 API URL 当我在本地主机上运行代理和应用程序时 它工作得非常好 现在我已准备好将我的应用程序部署到AWS 放大 我对如何让我的代理在那里运行有点
  • JSX 中的混合运算符

    我想在 JSX 中使用混合运算符 例如 datas datas map function data i return
  • 将响应式网格布局转换为 Plotly Dash

    我是一个非常活跃的 Dash 用户 我开始发现 Dash 使用中存在很多限制 并且我意识到有关如何将组件转换为 Dash 的信息 内容绝对有限 并且示例过时且非常简单 并且我对 Javascript 或 React 几乎没有任何了解 我完全
  • React Native 运行保持在 IDLE 状态

    这是我第一次设置 React NativeUbuntu 18 04 LTS 我已经完成设置 并且尝试使用以下命令在设备上运行该应用程序react native run android命令 这是我在终端中得到的输出 ron lenovo re
  • ESLint 如何集成到 Create React App 中?

    当我跑步时npx create react app some name 为我创建了一个简单的 React 项目 当我随后窥视package json 似乎有一些 ESLint 存在的证据 因为有 eslintConfig extends r

随机推荐

  • AngularJS ng-repeat 通过复杂和动态的 JSON 数组

    我正在尝试使用 JSON 数组向用户显示内容ng repeat选项 这JSON Array是动态创建的 所以我有点困惑如何向用户显示相同的内容 的语法JSON ARRAY内容如下COMPLEX key可以动态增加或减少 jsonList n
  • ASP.Net core-从中间件获取routetemplate值

    我有一个中间件 每次对我的 API 发出请求时都会调用该中间件 我想记录路由模板以及来自该中间件的请求的持续时间 如何在我的中间件代码中获取路由模板 路由模板类似于 products productId 这是我如何让它发挥作用的 我在过滤器
  • 如何使用 Python 和 Django 创建 SaaS 应用程序

    您能给我一些建议 让您可以使用 Python 和 Django 创建 SaaS 软件即服务 应用程序吗 目前我不明白的一般主题是 您是否为所有客户提供一个可用的应用程序 或者为每个客户提供一个应用程序 如何管理每个客户端的数据库访问 权限或
  • 原生原型与 $.extension()

    在工作中 我们使用 jQuery 在我们开始使用它后不久 我看到几个开发人员正在向文件 jquery extensions js 添加函数 在里面 我发现添加了一大堆方法 这本质上相当于 jQuery 上的静态方法 这里有一些 format
  • Apache 目录 LDAP - 分页搜索

    我一直在寻找使用 Apache Directory API 执行分页搜索的信息 但我没有找到任何示例或任何有关如何使用正确的 PagedResults 控件构建 SearchRequest 然后执行搜索的信息 你们有什么建议吗 或者知道哪里
  • TextToSpeech 改变声音

    我希望能够更改文本转语音 API 中的语音 例如更改 声音由女声转为男声 让声音更清晰 改变语速 请有人让我知道这是否可能 谢谢 您可以通过以下方式为特定字符串提供自己的转换addSpeech 不过 AFAICT 没有文档说明如何替换自己的
  • 如何构建这个项目? (jpeg 库)

    Edit 我现在正在使用http code google com p jpeg compressor http code google com p jpeg compressor 所以我不再关心让这个工作了 我下载了http ijg org
  • 从日语 IME 获取更多数据

    在我的 C 表单中 我有一个数据网格视图 我想在其中输入单词或句子的汉字和假名版本 并将它们放在不同的列中 例如 転寝 寝坊 我想要实现的是当我提交第一列时自动填充第二列 我知道有一些词典包含汉字读法 但对于句子来说它会变得复杂 而且还有很
  • 使用 VisualVM 和 JMX 进行远程监控

    我想使用 jvisualvm 或 jconsole 监视远程运行的 java spring boot 应用程序 在本地运行时 我可以在 jvisualvm 和 jconsole 中看到托管 bean 远程运行时我无法连接 我用几个不同的ja
  • 得到一个名为保留字的Oracle表,可能会出现哪些问题?

    我们刚刚外包了一个系统 乍一看我可以看到一些名称为 CASE 或 FROM 的表和字段 它是一个 Oracle 10g DB 我们将使用来自 Java Hibernate C C 的这些数据 有什么特别我们应该注意的吗 对于我在其他帖子中看
  • jQuery:一年中的一周脚本正在运行

    不久前我需要一个脚本来每周更新一些内容 我的问题在这个论坛 https stackoverflow com questions 3701276 jquery update content every week or long period
  • CMS 软件中的空白 index.html 而不是 .htaccess

    我注意到 Joomla Wordpress 和其他 CMS 在其所有子文件夹中都有空白的 index html 文件 以防止人们窥视文件夹结构 我的问题是为什么他们不能禁止使用 htaccess 文件查看文件夹 而不是将空白的 index
  • 多个 goroutine 的 Go 内存消耗

    我试图检查 Go 在 100 000 个 goroutine 上的表现如何 我编写了一个简单的程序来生成许多例程 除了打印一些公告之外什么也不做 我将 MaxStack 大小限制为仅 512 字节 但我注意到程序大小并没有随之减小 它消耗了
  • 从运行脚本阶段获取当前方案名称

    有没有办法从运行脚本阶段获取当前方案 我试过了 SCHEME NAME 但它不存在 我找不到要使用的环境变量 因此我必须开发一种解决方法 将方案名称写入磁盘建立预行动然后将其读回运行脚本 phase 对于您感兴趣的每个方案 请访问编辑方案并
  • LibGDX:如何使平铺地图图块可点击?

    如何为平铺地图中的图块添加点击侦听器 以便当您用鼠标选择图块时它会突出显示 libGDX 不直接支持这一点 因为 TiledMap 内容仅用于渲染 您可以轻松创建一个Stage不过 它将充当 TiledMap 的某种覆盖输入层 只需创建一个
  • 线程中的 GLib GMainContext?

    我在堆栈溢出上搜索以找到与我的问题相关的答案 但我没有找到任何答案 我有一个启动线程的主线程 我的 main 函数 新线程运行 GMainLoop 在我的主要功能中 我不断通过调用添加源g io watch一些文件描述符 但如果事件被调度
  • Python 日志记录和子进程输出以及错误流

    我想启动一个 python 进程并将子进程错误消息记录到父脚本的日志记录对象中 理想情况下 我希望将日志流统一到一个文件中 我可以以某种方式访问 日志记录类的输出流吗 我知道的一种解决方案是使用 proc log 进行日志记录 正如下面的答
  • 如何每天在特定时间触发 akka 调度程序?

    我创建了一个 Akka 的调度程序 每天在固定时间发送邮件 例如每天上午 6 00 那么如何称呼演员呢 我的意思是我应该使用什么逻辑 谢谢 只需计算现在和接下来的下午 6 点之间的差异 将其作为初始延迟 然后每 24 小时重复一次
  • Rails 5 - 在编辑操作中使用范围来查找特定实例的相关子项

    我正在尝试学习如何在 Rails 5 应用程序中使用范围 我问了一个背景问题here https stackoverflow com questions 41755032 rails 5 exclude specific instances
  • 在 React 中专注于 div,无需单击即可在模块上启用键盘导航

    我正在 React 中从头开始编写一个图像库 当单击图像时 会弹出一个模式 与我的库组件分开的组件 我想要使用左右箭头在图片之间导航 不仅仅是屏幕上添加的箭头 onclick 但目前它只关注当我单击一次时的模式 然后我也可以使用键盘导航 o