使用 react-select 和 react refs 时如何获取 ref.current dom 元素?
How to get the ref.current dom element when using react-select and react refs?
我有一组使用 react-select 包的 react selects – https://react-select.com/home.
我有一个包含三个 react-selects 的组件——基本上是这样的:
import Select from "react-select"
function SelectGroup(){
const ref1 = useRef(null);
const ref2 = useRef(null);
const ref3 = useRef(null);
return (
<div>
<Select ref={ref1} />
<Select ref={ref2} />
<Select ref={ref3} />
</div>
)
}
我需要执行一些检查以查看重点内容。我这样做的原因是因为 select 组是一个单独的组件,需要能够允许用户通过键盘以多种方式导航。空格键和回车键应该允许用户将焦点转移到下一个 select 元素。箭头键应允许用户转到下一个或上一个 select。因此,需要以某种方式管理焦点,这意味着知道当前焦点是什么。
通常情况下,我会这样做:
function isActiveElement(ref){
return ref?.current === document.activeElement
}
然而,对于ref.current react-select returns一个对象叫做StateManager – https://react-select.com/props#statemanager-props
所以,ref.current === document.activeElement
总是returns错误。
如何,我可以查看哪个 react-select 处于焦点吗?我无法在 react-select 文档中找到关于此的任何信息。也许,我想念它?我已经用其他方法解决了这个问题,但我很好奇是否有一种方法可以用我上面描述的这种“更简单的方法”来解决,这可能是更常见的方法。
您可以收听 focus
和 blur
事件以跟踪当前焦点 Select
:
export default function App() {
const [focus, setFocus] = useState(-1);
const onBlur = () => setFocus(-1);
return (
<div>
<div>Current focus: {focus}</div>
<Select
onFocus={() => setFocus(0)}
onBlur={onBlur}
options={colourOptions}
/>
<Select
onFocus={() => setFocus(1)}
onBlur={onBlur}
options={colourOptions}
/>
<Select
onFocus={() => setFocus(2)}
onBlur={onBlur}
options={colourOptions}
/>
</div>
);
};
现场演示
我有一组使用 react-select 包的 react selects – https://react-select.com/home.
我有一个包含三个 react-selects 的组件——基本上是这样的:
import Select from "react-select"
function SelectGroup(){
const ref1 = useRef(null);
const ref2 = useRef(null);
const ref3 = useRef(null);
return (
<div>
<Select ref={ref1} />
<Select ref={ref2} />
<Select ref={ref3} />
</div>
)
}
我需要执行一些检查以查看重点内容。我这样做的原因是因为 select 组是一个单独的组件,需要能够允许用户通过键盘以多种方式导航。空格键和回车键应该允许用户将焦点转移到下一个 select 元素。箭头键应允许用户转到下一个或上一个 select。因此,需要以某种方式管理焦点,这意味着知道当前焦点是什么。
通常情况下,我会这样做:
function isActiveElement(ref){
return ref?.current === document.activeElement
}
然而,对于ref.current react-select returns一个对象叫做StateManager – https://react-select.com/props#statemanager-props
所以,ref.current === document.activeElement
总是returns错误。
如何,我可以查看哪个 react-select 处于焦点吗?我无法在 react-select 文档中找到关于此的任何信息。也许,我想念它?我已经用其他方法解决了这个问题,但我很好奇是否有一种方法可以用我上面描述的这种“更简单的方法”来解决,这可能是更常见的方法。
您可以收听 focus
和 blur
事件以跟踪当前焦点 Select
:
export default function App() {
const [focus, setFocus] = useState(-1);
const onBlur = () => setFocus(-1);
return (
<div>
<div>Current focus: {focus}</div>
<Select
onFocus={() => setFocus(0)}
onBlur={onBlur}
options={colourOptions}
/>
<Select
onFocus={() => setFocus(1)}
onBlur={onBlur}
options={colourOptions}
/>
<Select
onFocus={() => setFocus(2)}
onBlur={onBlur}
options={colourOptions}
/>
</div>
);
};