【发布时间】:2023-03-29 08:38:01
【问题描述】:
我正在开发一个开源项目,但遇到了一个错误。我无法使用键盘(箭头键/标签)导航下拉列表项。我已经编写了键盘导航逻辑,但不太确定如何实现它。下面是代码sn-p。
.
.
.
const TopNavPopoverItem: FC<ComponentProps> = ({closePopover, description, iconSize, iconType, title, to}) => {
const history = useHistory();
const handleButtonClick = (): void => {
history.push(to);
closePopover();
};
const useKeyPress = function (targetKey: any) { // where/how am I supposed to use this function?
const [keyPressed, setKeyPressed] = useState(false);
function downHandler(key: any) {
if (key === targetKey) {
setKeyPressed(true);
}
}
const upHandler = (key: any) => {
if (key === targetKey) {
setKeyPressed(false);
}
};
React.useEffect(() => {
window.addEventListener('keydown', downHandler);
window.addEventListener('keyup', upHandler);
return () => {
window.removeEventListener('keydown', downHandler);
window.removeEventListener('keyup', upHandler);
};
});
return keyPressed;
};
return (
<button className="TopNavPopoverItem" onClick={handleButtonClick}>
<Icon className="TopNavPopoverItem__icon" icon={iconType} size={iconSize} />
<div className="TopNavPopoverItem__right">
<span className="TopNavPopoverItem__title">{title}</span>
<span className="TopNavPopoverItem__description">{description}</span>
</div>
</button>
);
};
任何解决方法或修复? 提前致谢。
【问题讨论】:
-
useKeyPress的目标是什么?它似乎是 React 的自定义钩子;您希望消费者如何使用它?你可能想看看documentation for building custom hooks..
标签: html reactjs typescript ecmascript-2016