javascript - (React.js) 使用箭头键滚动列表
问题描述
我正在开发一个自动完成组件,但我无法使用箭头键(向下/向上)滚动,使用鼠标它可以正常工作。
我对此进行了很多研究,并试图用 refs 解决这个问题,但没有奏效。
const refs = filteredSuggestions.reduce((acc, value) => {
acc[value.id] = React.createRef();
return acc;
}, {});
引用的地方
suggestionsListComponent = (
<ul class="suggestions">
{filteredSuggestions.map((suggestion, index) => {
let className;
if (index === activeSuggestion) {
className = "suggestion-active";
}
return (
<li ref={refs[suggestion.id]} className={className} key={suggestion} onClick={onClick}>
{suggestion}
</li>
);
})}
</ul>
);
完整代码在这里:codesandbox
谁能帮我解决这个问题?
解决方案
使用swipe-react和wheel-react包中使用的相同配置,轻松地将您的 react 组件与键盘箭头键集成。
用法
安装 npm 包:
npm install --save arrow-keys-react
导入它:
import ArrowKeysReact from 'arrow-keys-react';
在组件构造函数或渲染函数中配置箭头键事件('left'、'right'、'up'、'down'),至少其中一个:
ArrowKeysReact.config({ left: () => { console.log('left key detected.'); }, right: () => { console.log('right key detected.'); }, up: () => { console.log('up key detected.'); }, down: () => { console.log('down key detected.'); } });
4.与您的 React 组件集成:
<YourComponent {...ArrowKeysReact.events} />
例子
import React, { Component } from 'react';
import ArrowKeysReact from 'arrow-keys-react';
class App extends Component {
constructor(props){
super(props);
this.state = {
content: 'Use arrow keys on your keyboard!'
};
ArrowKeysReact.config({
left: () => {
this.setState({
content: 'left key detected.'
});
},
right: () => {
this.setState({
content: 'right key detected.'
});
},
up: () => {
this.setState({
content: 'up key detected.'
});
},
down: () => {
this.setState({
content: 'down key detected.'
});
}
});
}
render() {
return (
<div {...ArrowKeysReact.events} tabIndex="1">
{this.state.content}
</div>
);
}
}
export default App;
评论
- 使用时
div
,添加tabIndex
属性。 - 元素必须处于焦点上才能检测箭头键。当用户单击元素或使用键盘中的 tab 键聚焦它时,将检测到箭头键。或者,您可以将组件编程为
focus()
加载时。 ArrowKeysReact.config
可以放在render
函数中而不是constructor
函数中。
推荐阅读
- active-directory - 无法通过 pyad 联系 Active Directory
- php - 在第 1 行 [mysqli] 的“1”附近找不到正确的语法
- c# - 实体框架 - 更新的关系不会检索从旧关系创建的数据
- sockets - 无需命令即可从 IoT 设备中提取每个示例日期时间
- python - Python:杀死父进程后保留子进程
- javascript - 无法使用 :not() 将按钮定位为分离行为
- java - 防止更改数组中的值
- django - 当我的输入图像以纯数据格式接收给我时,如何在 http 响应中调整图像的大小?
- python - python数据框根据其他列值合并列
- javascript - 如何使用 GitLab 页面来托管带有用户输入表单的网页,该表单在保存时会更新 GitLab 存储库?