ReactJS:如何在输入元素进入 DOM 时将焦点设置到它?

IT技术 reactjs
2021-05-15 22:53:35

如何在input元素进入 DOM 时为其设置焦点

设想

单击按钮时,将显示输入元素。如何设置焦点到这个元素?

代码片段

class Component extends React.Component{
  constructor(props) {
    super(props);
    this.state = {
      showInput: false
    }
  }

  render() {
      return (
        <div>
          <div onClick={() => {
              this.setState({showInput: true});
              ReactDOM.findDOMNode(this.refs.myInput).focus() // <- NOT WORKING
          }}>
            Show Input
          </div>
          {
            (this.state.showInput) ? (
                <input
                    type="text"
                    ref="myInput"
                />
            ) : ""
          }  
        </div>
      );
  }
}

ReactDOM.findDOMNode(this.refs.myInput).focus()状态更改后调用不起作用。更改状态更改时styleortype属性也不起作用。

4个回答

假设您一次只需要在页面上进行一个可见的输入即可自动对焦 Poh Zi How建议使用autofocus可能是最简单的。

<input type="text" autofocus/>

应该可以解决问题,不需要 JS!

componentDidMountcomponentDidUpdate钩子中这样做:

ReactDOM.findDOMNode(this.refs.myInput).focus()

你应该使用参考

<input ref={(input) => { this.inputSearch = input; }} defaultValue="search ... " />

并使用此代码作为焦点

this.inputSearch.focus();

我必须将变量定义为HTMLInputElement1st ...

private inputSearch: HTMLInputElement;

然后将其添加到控件中:

ref={(input) => { this.inputSearch = input; }} 

然后我可以得到它来构建/工作:

this.inputSearch.focus();