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

2024-04-29

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

当我设置对 Select 元素的引用并尝试调用.focus上面说没有找到焦点功能。也许我应该以某种方式获取它的子元素,然后调用焦点?

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

当我想要的时候,如何正确地让反应选择元素获得焦点?

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

  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() or this.dropdownNode.current.focus()两者都说没有找到对焦方法。


因为你正在包裹Select组件,你不能调用 Select 的.focus()来自您提供给包装器的引用的函数。自从ref是一种特殊的 prop,该包装器的 ref 仅指Wrapper本身,not它包装的组件(选择)。

要访问实际的Select组件的 ref,您必须将 ref 作为具有不同的非魔术名称的 prop 传递给它,例如innerRef(反应选择代码实际上给出了一个很好的例子,因为它正在访问实际的输入元素并且专注于那个 https://github.com/JedWatson/react-select/blob/master/src/Select.js#L471).

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

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何才能随意关注一个react-select组件呢? 的相关文章

随机推荐

  • ios7 UITableViewCell SelectionStyle 不会变回蓝色

    Xcode 5 0 iOS 7 并更新现有应用程序 UITableView所选行现在是灰色的 而不是蓝色的 据我所知 他们更改了默认值selectionStyle至灰色 但 蓝色 仍然是 IB 的一个选项UITableViewCellSel
  • 在内核模块中执行shell命令

    是否可以在内核模块中执行shell命令 我知道我们可以在用户空间 C 代码中使用system子程序 我正在调试一个存在内存泄漏问题的内核模块 在无限循环中执行 insmod 和 rmmod module ko 后 8G RAM 的系统在几分
  • boost Deadline_timer 最小示例:我应该替换“睡眠”吗?

    我有一个线程 我需要每 10 毫秒执行一些操作 所以我有非常简单的代码 如下所示 while work do something Sleep 10000 boost sleep can be also used 我听说Sleep一般不推荐
  • 避免在react + typescript中使用通用函数类型

    我正在寻找一条规则来阻止使用 函数 作为类型 myMethod Function 我没有找到任何东西 所以我愿意接受建议 您可以使用 typescript eslint ban types rule 规则链接 https github co
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • Emmeans 连续自变量

    我想解释一下Type f with Type space实验的内容和速率Exhaustion product和定量变量Age 这是我的数据 res structure list Type space structure c 2L 2L 2L
  • Julia 中 @with_kw 和 Base.@kwdef 之间的区别?

    受到这个问题评论的启发 with kw 在 Julia 中做什么 https stackoverflow com questions 69586136 what does with kw do in julia 有什么区别 with kw
  • JQuery DatePicker 和 beforeShowDay

    我拼命尝试使用此功能在我的日期选择器中仅启用特定日期 但是beforeShowDay函数永远不会被触发 即使这不起作用 document ready function initialisation des composants initCo
  • 这个小波变换实现正确吗?

    我正在寻找 FFT 的替代方案来用 python 创建频谱分析仪 我听说小波变换比短时 FFT 更快并且提供更好的时间精度 我查阅了这篇维基百科文章 其中介绍了 Java 中的 Haar 小波变换实现 https en wikipedia
  • 像插入一样更新

    是否可以执行update like insert UPDATE table SET value N N N N Y Y Y N N WHERE my id 1 The problem is that the number of values
  • iOS - 使用隐藏字幕的 AVPlayer

    我正在 iOS 上使用 AVPlayer 来使用 closeCaptionDisplayEnabled 属性 显示电影上的字幕或副标题 hls 或 mp4 但标题不显示任何内容 我不知道为什么 您有什么解决方案可以在电影 hls mp4 上
  • 我的傅立叶逆变换中的尖峰

    我正在尝试在 MATLAB 中比较两个数据集 为此 我需要通过傅里叶变换数据来过滤数据集 对其进行过滤 然后对其进行逆傅里叶变换 然而 当我对数据进行逆傅里叶变换时 我在红色数据集的两端都出现了一个尖峰 图片显示了第一个尖峰 它在开始时应该
  • 如何使无线电输入成为必需?

    我在表单中提供了无线电输入 供用户选择性别 如何使性别成为必需的输入 用户必须选择女性或男性 否则他们会按照通常的方式得到提示required 我尝试添加required如下所示 但它不起作用 用户可以继续而不选择女性或男性 div cla
  • .NET Core 中 Path.TryJoin 相对于 Path.Combine 有什么优势?

    我刚刚开始使用 NET Core 2 1 发现Path TryJoin https learn microsoft com en us dotnet api system io path tryjoin view netcore 2 1 a
  • 如何使用seaborn、python中的彩色气泡图设置数值变量的色调范围?

    我正在尝试使用seaborn创建3D点 x y z 的彩色气泡图 每个坐标都是 0 255 范围内的整数 我希望轴代表 x 和 y 散点气泡的色调和大小代表 z 坐标 代码 import seaborn seaborn set import
  • SQL Server 2008 相对于 SQL Server 2005 有何优势? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • HTML5shiv 仅在 HEAD 部分有效?

    为了使我的网站尽可能快 我更喜欢在文档末尾加载 js 脚本 就在结束正文标记之前 为 HEAD 部分保留 css 但是 我发现下面的 html shiv 代码显然仅在 HEAD 部分实例化时才有效 有人知道解决方法吗 谷歌代码是NOTCDN
  • 将张量的完整值打印到控制台或写入张量流中的文件

    我需要将一个大张量 32 32 3 打印到控制台中 并且我只得到如下输出 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245 245
  • RCurl 和自签名证书问题

    我在获取时遇到问题RCurl功能getURL访问使用自签名证书的服务器上的 HTTPS URL 我在 Mac OS X 10 9 2 上运行 R 3 0 2 我已阅读FAQ http www omegahat org RCurl FAQ h
  • 如何才能随意关注一个react-select组件呢?

    使用react select v2 我想在用户按下某个键时显示并聚焦于 Select 元素 以下是我尝试过的一些事情或我走过的路 当我设置对 Select 元素的引用并尝试调用 focus上面说没有找到焦点功能 也许我应该以某种方式获取它的