从 React ref 启动键盘事件
Launch keyboard event from React ref
我有一个 React 组件,它有一个 input
元素和附加的 ref。我知道常见的:inputRef.current.focus();
使用 ref 来聚焦文本输入。但是,我正在努力寻找一个好的解决方案来从 inputRef.current
调度某个键盘事件。我试过:
let downEv = new KeyboardEvent('keydown', {'keyCode': 40, 'which': 40});
inputRef.current.dispatchEvent(downEv);
但是,这似乎没有任何作用。
可以这样做,而且不需要使用 ref.
您可以通过执行以下操作来尝试隔离要触发的内容:
handleKeyPress = (e) => {
if (e.keyCode === 40) {
// Whatever you want to trigger
console.log(e.target.value)
}
}
<input onKeyPress={handleKeyPress} />
如果您愿意,也可以从表单中触发:
<form onKeyPress={handleKeyPress}>
...
</form>
KeyboardEvent 是一个本机浏览器事件(不同于 React 的合成事件)因此您需要像下面一样添加一个本机侦听器才能侦听它们。 csb
上的示例
useEffect(()=>{
ref.current.addEventListener('keydown',handleKeyDown)
},[ref])
我有一个 React 组件,它有一个 input
元素和附加的 ref。我知道常见的:inputRef.current.focus();
使用 ref 来聚焦文本输入。但是,我正在努力寻找一个好的解决方案来从 inputRef.current
调度某个键盘事件。我试过:
let downEv = new KeyboardEvent('keydown', {'keyCode': 40, 'which': 40});
inputRef.current.dispatchEvent(downEv);
但是,这似乎没有任何作用。
可以这样做,而且不需要使用 ref.
您可以通过执行以下操作来尝试隔离要触发的内容:
handleKeyPress = (e) => {
if (e.keyCode === 40) {
// Whatever you want to trigger
console.log(e.target.value)
}
}
<input onKeyPress={handleKeyPress} />
如果您愿意,也可以从表单中触发:
<form onKeyPress={handleKeyPress}>
...
</form>
KeyboardEvent 是一个本机浏览器事件(不同于 React 的合成事件)因此您需要像下面一样添加一个本机侦听器才能侦听它们。 csb
上的示例useEffect(()=>{
ref.current.addEventListener('keydown',handleKeyDown)
},[ref])