如何聚焦位于子组件中的输入字段

Era*_*uwa 8 autosuggest reactjs

我在父组件中有一个按钮.我想通过单击该按钮来聚焦位于子组件中的输入字段.我该怎么做.

Shu*_*tri 17

您可以利用它refs来实现结果

class Parent extends React.Component {
  
  handleClick = () => {
    this.refs.child.refs.myInput.focus();
  }
  render() {
    return (
      <div>
        <Child ref="child"/>
        <button onClick={this.handleClick.bind(this)}>focus</button>
      </div>
    )
  }
}

class Child extends React.Component {
  render() {
    return (
      <input type="text" ref="myInput"/>
    )
  }
}

ReactDOM.render(<Parent/>, document.getElementById('app'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
Run Code Online (Sandbox Code Playgroud)

更新:

React docs建议使用a ref callback而不是string refs

class Parent extends React.Component {
  
  handleClick = () => {
    this.child.myInput.focus();
  }
  render() {
    return (
      <div>
        <Child ref={(ch) => this.child = ch}/>
        <button onClick={this.handleClick.bind(this)}>focus</button>
      </div>
    )
  }
}

class Child extends React.Component {
  render() {
    return (
      <input type="text" ref={(ip)=> this.myInput= ip}/>
    )
  }
}

ReactDOM.render(<Parent/>, document.getElementById('app'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
Run Code Online (Sandbox Code Playgroud)

  • 如何用钩子做到这一点? (6认同)