gpt4 book ai didi

reactjs - 如何才能随意关注一个react-select组件呢?

转载 作者:行者123 更新时间:2023-12-03 13:38:11 25 4
gpt4 key购买 nike

使用react-select v2,我想在用户按下某个键时显示并聚焦于Select元素。以下是我尝试过的一些事情或我走过的路。

当我设置对 Select 元素的引用并尝试对其调用 .focus 时,它表示未找到焦点函数。也许我应该以某种方式获取它的子元素,然后调用焦点?

似乎没有任何我可以传递的 Prop 可以触发焦点功能。有一个 openOnFocus,但没有 focusOnOpen。我唯一能想到的就是启用自动对焦,然后以某种方式触发重新安装,但似乎没有一种简单的方法可以做到这一点,而且感觉很糟糕。或者,我可以在每次按下按键时创建 Select 组件而不是显示它,然后卸载它而不是隐藏它。

如何在我想要的时候正确地让 react 选择元素获得焦点?

我在我的组件周围使用了包装组件。这是我的包装器的渲染方法:

  render() {
return (
<Select
options={this.props.options}
value={this.state.value}
ref={this.selectRef}
/>
);
}

这就是我调用该包装器的地方:

        <Wrapper
options={this.props.labelOptions}
ref={this.wrapperRef}
/>

然后,我尝试使用 this.dropdownNode.focus()this.dropdownNode.current.focus() 调用 focus,两者都表示未找到 focus 方法。

最佳答案

由于您正在包装 Select 组件,因此您无法从提供给包装器的引用中调用 Select 的 .focus() 函数。由于 ref 是一种特殊类型的 prop,因此该包装器的 ref 仅引用 Wrapper 本身,而不它所包装的组件 (Select) .

要访问实际的 Select 组件的引用,您必须将引用作为具有不同的非魔术名称的 prop 传递给它,例如 innerRef (react -select 代码实际上给出了一个很好的示例,因为它正在访问实际的输入元素和 focusing on that )。

这是修复该问题的更改。这是实际使用 Select 的包装器组件(并且它接收传递给它的引用):

  render() {
return (
<Select
options={this.props.options}
value={this.state.value}
ref={this.props.innerRef}
/>
);
}

这是调用该包装器的组件。在构造函数中,我使用 this.selectRef = React.createRef() 创建引用,然后将其作为此渲染方法中的 prop 传入:

        <Wrapper
options={this.props.labelOptions}
innerRef={this.selectRef}
/>

然后我可以通过在任何我想要的地方运行 this.selectRef.current.focus() 来调用 Select 组件本身的焦点。

注释:感谢BoyWithSilverWings的回答。这个问题与 React 16.3 有关。还有一个新的 React.ForwardRefs 方法,但这种方法对我来说似乎更简单。

关于reactjs - 如何才能随意关注一个react-select组件呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55310433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com