zoukankan      html  css  js  c++  java
  • [React] Forward a DOM reference to another Component using forwardRef in React 16.3

    The function forwardRef allows us to extract a ref and pass it to its descendants. This is a powerful tool, but should be used with caution to avoid unexpected ref behaviour. The technique of forwarding refs really starts to shine in combination with higher order components (HOCs).

    forwardRef should be used when you are using HOC and pasing the ref around from parent to child component.

    parent component:

    import React, { Component } from "react";
    import TextInput from "./TextInput";
    
    class App extends Component {
      inputRef = React.createRef();
    
      focusInput = () => {
        this.inputRef.current.focus();
      };
    
      render() {
        return (
          <React.Fragment>
            <TextInput inputRef={this.inputRef} />
            <button onClick={this.focusInput}>Focus</button>
          </React.Fragment>
        );
      }
    }
    
    export default App;

    child commponent:

    import React, { Component, Fragment } from "react";
    import logProps from "./logProps";
    
    class TextInput extends Component {
      render() {
        return <input ref={this.props.inputRef} />;
      }
    }
    
    export default logProps(TextInput);

    HOC componnet:

    import React, { Component } from "react";
    
    function logProps(Component) {
      class LogProps extends Component {
        componentDidUpdate(prevProps) {
          console.log("before update", prevProps);
          console.log("after update", this.props);
        }
    
        render() {
          const { forwardRef, ...rest } = this.props;
          return <Component {...rest} ref={forwardRef} />;
        }
      }
    
      const forwardRef = (props, ref) => {
        return <LogProps forwardRef={ref} {...props} />;
      };
    
      const name = Component.displayName || Component.name;
      forwardRef.displayName = `logProps(${name})`;
    
      return React.forwardRef(forwardRef);
    }
    
    export default logProps;

    Display name:

    Becasue HOC component doesn't have a correct display name in the dev tool, we need to set it up:

      const forwardRef = (props, ref) => {
        return <LogProps forwardRef={ref} {...props} />;
      };
    
      const name = Component.displayName || Component.name;
      forwardRef.displayName = `logProps(${name})`;
    
      return React.forwardRef(forwardRef);

  • 相关阅读:
    HDU_1068_Girls and Boys_二分图匹配
    Bringing Native Performance to Electron
    BIM开发引挈
    旷视科技 -- Face++ 世界最大的人脸识别技术平台
    freedownloadmanager 下载工具,代替 讯雷
    两种 AuthorizationSchemes 在 ASP.NET Core 2
    layout 的应用
    递归获取一个树层次结构(合同清单)的部分选择项(计量合同清单),以及递归删除部分清单
    Nest + typeorm
    http://nancyfx.org + ASPNETCORE
  • 原文地址:https://www.cnblogs.com/Answer1215/p/9003540.html
Copyright © 2011-2022 走看看