onFocus 与热键反应以专注于页面上任何位置的元素
onFocus react with hotkeys to focus on elements anywhere on page
我正在尝试使用 shift + 数字创建热键,以专注于我网页上的某个元素。在 JavaScript 中,您在定位元素后使用 .focus() 但在反应中我很困惑。我有大约 5 个组件需要关注热键按下。我目前有代码可以 运行 按键,还有 运行 一个函数,但我不知道如何进行。
我知道 onFocus 只会 运行 当我在此处选择或单击输入时......但我不知道如何像条件合成事件那样做。和热键一样? onFocus : 空
//app.js
function useKey(key, cb) {
const callbackRef = useRef(cb);
useEffect(() => {
callbackRef.current = cb;
});
useEffect(() => {
function hotkeyPress(e) {
if (e.shiftKey && e.keyCode === key) {
callbackRef.current(e);
}
}
document.addEventListener('keydown', hotkeyPress);
return () => document.removeEventListener('keydown', hotkeyPress);
}, [key]);
}
<ContactInfo
searchValue={searchValue}
handleSearchChange={handleSearchChange}
onSearchCloseClick={onSearchCloseClick}
onSearchClick={onSearchClick}
useKey={useKey}
/>
//component to use
function handleKeypress() {
//?
}
<input
className='contactSearchForm__input'
placeholder='Customer name/number'
type='text'
list='searchList'
value={searchValue}
onChange={handleSearchChange}
onFocus={useKey(49, handleKeypress)}
/>
所以我做的有点太多了。这就是您使用 React 在页面上使用热键定位和聚焦不同元素所需的全部。我最终将其更改为 f 键,但您也可以使用 shift + 数字键或任何其他键。
//app.js
function useKey(key, ref) {
useEffect(() => {
function hotkeyPress(e) {
if (e.keyCode === key) {
e.preventDefault();
ref.current.focus();
return;
}
}
document.addEventListener('keydown', hotkeyPress);
return () => document.removeEventListener('keydown', hotkeyPress);
}, [key]);
}
//component to use
const f1Ref = useRef();
useKey(112, f1Ref);
<input
className='contactSearchForm__input'
placeholder='Customer name/number'
type='text'
list='searchList'
value={searchValue}
onChange={handleSearchChange}
ref={f1Ref}
/>
我正在尝试使用 shift + 数字创建热键,以专注于我网页上的某个元素。在 JavaScript 中,您在定位元素后使用 .focus() 但在反应中我很困惑。我有大约 5 个组件需要关注热键按下。我目前有代码可以 运行 按键,还有 运行 一个函数,但我不知道如何进行。
我知道 onFocus 只会 运行 当我在此处选择或单击输入时......但我不知道如何像条件合成事件那样做。和热键一样? onFocus : 空
//app.js
function useKey(key, cb) {
const callbackRef = useRef(cb);
useEffect(() => {
callbackRef.current = cb;
});
useEffect(() => {
function hotkeyPress(e) {
if (e.shiftKey && e.keyCode === key) {
callbackRef.current(e);
}
}
document.addEventListener('keydown', hotkeyPress);
return () => document.removeEventListener('keydown', hotkeyPress);
}, [key]);
}
<ContactInfo
searchValue={searchValue}
handleSearchChange={handleSearchChange}
onSearchCloseClick={onSearchCloseClick}
onSearchClick={onSearchClick}
useKey={useKey}
/>
//component to use
function handleKeypress() {
//?
}
<input
className='contactSearchForm__input'
placeholder='Customer name/number'
type='text'
list='searchList'
value={searchValue}
onChange={handleSearchChange}
onFocus={useKey(49, handleKeypress)}
/>
所以我做的有点太多了。这就是您使用 React 在页面上使用热键定位和聚焦不同元素所需的全部。我最终将其更改为 f 键,但您也可以使用 shift + 数字键或任何其他键。
//app.js
function useKey(key, ref) {
useEffect(() => {
function hotkeyPress(e) {
if (e.keyCode === key) {
e.preventDefault();
ref.current.focus();
return;
}
}
document.addEventListener('keydown', hotkeyPress);
return () => document.removeEventListener('keydown', hotkeyPress);
}, [key]);
}
//component to use
const f1Ref = useRef();
useKey(112, f1Ref);
<input
className='contactSearchForm__input'
placeholder='Customer name/number'
type='text'
list='searchList'
value={searchValue}
onChange={handleSearchChange}
ref={f1Ref}
/>