协慌网

登录 贡献 社区

渲染后如何在输入字段上设置焦点?

呈现组件后,将焦点设置在特定文本字段上的反应方式是什么?

文档似乎建议使用引用,例如:

在渲染函数的输入字段中设置ref="nameInput"

this.refs.nameInput.getInputDOMNode().focus();

但是我应该在哪里称呼它呢?我已经尝试了几个地方,但无法正常工作。

答案

@Dhiraj 的答案是正确的,为方便起见,您可以使用 autoFocus 道具在安装时让输入自动聚焦:

<input autoFocus name=...

请注意,在 jsx 中,它是autoFocus (大写 F),不像普通的旧 html,它不区分大小写。

componentDidMount执行此操作,并改为refs callback像这样

componentDidMount(){
   this.nameInput.focus(); 
}

class App extends React.Component{
  componentDidMount(){
    this.nameInput.focus();
  }
  render() {
    return(
      <div>
        <input 
          defaultValue="Won't focus" 
        />
        <input 
          ref={(input) => { this.nameInput = input; }} 
          defaultValue="will focus"
        />
      </div>
    );
  }
}
    
ReactDOM.render(<App />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react-dom.js"></script>
<div id="app"></div>

从 React 0.15 开始,最简洁的方法是:

<input ref={input => input && input.focus()}/>