如何集中一个输入字段,它位于一个子组件

问题描述 投票:7回答:3

我有一个父组件按钮。我想集中输入字段,它位于一个子组件,通过点击该按钮。我该怎么做。

reactjs autosuggest
3个回答
16
投票

您可以使用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'));
<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>

更新:

反应文档建议在使用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'));
<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>

2
投票

你可以简单地在你的子组件使用componentDidMount(),如下

class Child extends React.Component {
  componentDidMount() {
   this.myInput.focus()
  }

  render() {
    return (
      <input type="text" ref={(input)=> this.myInput= input}/>
    )
  }
}

1
投票

而不是从父母访问的子组件的输入元素的,最好是如下公开的方法,

class Parent extends React.Component {

  handleClick = () => {
    this.refs.child.setFocus();
  };

  render() {
    return (
      <div>
        <Child ref="child"/>
        <button onClick={this.handleClick.bind(this)}>focus</button>
      </div>
    )
  }
}

class Child extends React.Component {

  setFocus() {
    this.refs.myInput.focus();
  }

  render() {
    return (
      <input type="text" ref="myInput"/>
    )
  }
}

ReactDOM.render(<Parent/>, document.getElementById('app'));
© www.soinside.com 2019 - 2024. All rights reserved.