当前位置: 首页 > 知识库问答 >
问题:

如何以编程方式对输入进行聚焦

谢承
2023-03-14

我试图实现一个非常简单的用例,一个UI特性,其中:

    null
<div className={((this.state.toggleWordEdit) ? '' : 'hidden')}>
<input id={this.props.word._id} className="form-control"
        ref="updateTheWord" 
        defaultValue={this.state.word}
        onChange={this.handleChange}
        onKeyPress={this.handleSubmit}
        autoFocus={this.state.toggleWordEdit}/></div>
    <div className={((this.state.toggleWordEdit) ? 'hidden' : '')}>
      <h3 onClick={this.updateWord}>
        {this.state.word}</h3>
    </div>
this.refs.updateTheWord.focus();

这些建议和类似的建议都不起作用。我也试着愚弄一下反应,看看我能不能做点什么!我使用了真实的DOM:

    const x = document.getElementById(this.props.word._id);
    x.focus();

而且也没用。我甚至无法理解的一件事是这样的建议:将ref作为一个方法(我“猜测”),我甚至没有尝试它,因为我有很多这样的组件,我需要ref来进一步获得每个组件的值,我无法想象如果我的ref没有命名,我如何获得的值!

所以你能给出一个想法,帮助我理解,如果我不使用一个表单(因为我需要一个单一的输入框代替一个标签),我如何设置它的焦点,当它的CSS(Bootstrap)类失去‘隐藏’请?

共有1个答案

东方旺
2023-03-14

你使用refs的方式不是最喜欢的方式,或者它不再是最佳实践。试试这样的东西

class MyClass extends React.Component {
  constructor(props) {
    super(props);
    this.focus = this.focus.bind(this);
  }

  focus() {
    this.textInput.current.focus();
  }

  render() {

    return (
      <div>
        <input
          type="text"
          ref={(input) => { this.textInput = input; }} />
        <input
          type="button"
          value="Set Focus"
          onClick={this.focus}
        />
      </div>
    );
  }
}

更新
从React 16.3开始,您可以使用React.createRef()API

class MyClass extends React.Component {
  constructor(props) {
    super(props);
    // create a ref to store the textInput DOM element
    this.textInput = React.createRef();
    this.focus = this.focus.bind(this);
  }

  focus() {
    // Explicitly focus the text input using the raw DOM API
    // Note: we're accessing "current" to get the DOM node
    this.textInput.current.focus();
  }

  render() {
    // tell React that we want to associate the <input> ref
    // with the `textInput` that we created in the constructor
    return (
      <div>
        <input
          type="text"
          ref={this.textInput} />
        <input
          type="button"
          value="Set Focus"
          onClick={this.focus}
        />
      </div>
    );
  }
}
 类似资料:
  • 问题内容: 我正在尝试以编程方式选择/聚焦一行。 我可以选择一行,但它不会呈现为 焦点 (未突出显示)。我已经尝试了以下代码的许多组合,但似乎没有任何效果。 是否可以通过编程突出显示行? 我正在使用JavaFX 2.2.21 问题答案: 尝试首先将请求放在表焦点上,然后将整个内容包装在一个文件中。

  • 问题内容: 我正在尝试实现一个非常简单的用例,UI功能,其中: 有一个带有一些内容的标签 如果单击,则将文本输入替换为可用标签的内容 用户可以编辑内容 按下回车键时,输入将隐藏并且标签将返回具有更新内容的内容 我最终可以完全正确(实际上是使用MongoBD后端,redux等),而我唯一做不到的事情(花了一整天的时间在Google上搜索和阅读SOF类似的帖子)是: 当我的文字输入出现时,我无法将焦点

  • 问题内容: 有没有办法以编程方式对JTable进行排序? 我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。 我知道,SWingX JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。 编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起

  • 问题内容: 如果我们有以下代码片段: 在终端中,输入请求如下所示 如何以编程方式模拟用户的输入。 问题答案: 这是一个示例,该示例如何使用函数来操纵的输入缓冲区,以从检索假输入 看到它正常工作 另一个选择(与JoachimPileborg在其评论恕我直言中所说的更接近)是将阅读代码放入单独的函数中,例如 这使您可以进行不同的测试和生产要求,例如

  • 我还可以在控制台中看到这些行: 我的应用程序服务器是weblogic 12c

  • 问题内容: 我正在将Xcode7和Swift与Storyboards一起使用。当我打开LaunchScreen.storyboard并尝试在其上设置自定义类时,Xcode抱怨一个人不能在LaunchScreen故事板上拥有自定义类。所以我的问题是,有什么方法可以对LaunchScreen进行编程编码,因为我想避免使用IB在其上拖放元素。 问题答案: 否, 在 您的应用开始执行 之前 会显示启动屏幕