类组件

  1. 回调函数

    1. class Foo extends Component {
    2. handleInput = (input) => {
    3. this.input = input;
    4. }
    5. onClick = () => {
    6. this.input.focus();
    7. }
    8. render() {
    9. return (
    10. <div>
    11. <input type="text" ref={this.handleInput} />
    12. <button onClick={this.onClick}>聚集</button>
    13. </div>
    14. )
    15. }
    16. }
  2. 使用 createRef (推荐写法)

    1. class Foo extends Component {
    2. inputRef = createRef();
    3. onClick = () => {
    4. this.inputRef.current.focus();
    5. }
    6. render() {
    7. return (
    8. <div>
    9. <input type="text" ref={this.inputRef} />
    10. <button onClick={this.onClick}>聚集</button>
    11. </div>
    12. )
    13. }
    14. }
  3. 父组件可以操作子组件的 Ref

    1. const App = props => {
    2. const FooRef = createRef();
    3. const onClick = () => {
    4. FooRef.current.onClick(); // 执行子组件(类组件)上的 onClick 方法
    5. }
    6. return (
    7. <div>
    8. <Foo ref={FooRef}/>
    9. <button onClick={onClick}>父组件</button>
    10. </div>
    11. )
    12. }

    函数组件 useRef

    1. const Foo = props => {
    2. const inputRef = useRef();
    3. const onClick = () => {
    4. inputRef.current.focus();
    5. }
    6. return (
    7. <div>
    8. <input type="text" ref={inputRef} />
    9. <button onClick={onClick}>聚集</button>
    10. </div>
    11. )
    12. }