✒️
Notes
  • Lirenxn's daily notes
  • Featured
    • Concurrent on fiber and requestIdleCallback
    • Deep dive eslint
      • eslint with class property
      • eslint with fix
      • eslint with jsx
    • A opinioned intro to React Hooks
      • React Hooks 1 - An Overview
      • React Hooks 2 - A mindset change
      • React Hooks 3 - Test Hooks
    • Handy tricks
    • About Micro FrontEnd
    • Same-site cookie
    • Thoughts
      • Application Security for frontend OWASP
      • Javascript this
      • React validation
  • 2020 Daily Notes
    • Notes-04-05-eslint-and-babel
    • Notes-04-03-Hard-interview-question
    • Notes-03-31-ReactContext-JS-inherit
    • Notes-03-28-digital-signing-webpack-dynamic-import-JsonRest-Promise-pattern-performance.measure()
    • Wk-notes-03-16-i18n-solution
    • Notes-03-15-Concurrent-with-requestIdleCallback
    • Notes-03-15-Micro-frontend
    • Wk-notes-03-09-micro-frontend-bootstrapper
    • Wk-notes-02-27-API-design-(g)RPC-REST-etc
    • Wk-notes-02-26-React-form-validation-Boolean-algebra-Rule-for-this-App-security-npm-devtool-tricks
    • Wk-notes-02-18-i18n-gRPC
    • Wk-notes-02-11-Gradual-rollout-webpack-vscode-auto-import
    • Note-02-09-spring-webpack
    • Wk-notes-02-06-more-webpack
    • Wk-notes-02-05-Learn-spring-webpack
    • Wk-notes-02-04-props-drilling-virtual-list
    • Wk-notes-02-03-same-site-cookie
    • Wk-notes-01-31-g-recaptcha-npmshrinkwrap
    • Wk-notes-01-30-React-ref
    • Wk-notes-01-23-remote-android
    • Wk-notes-01-23-test-hook
    • Wk-notes-01-22-about-Hooks
    • Wk-notes-01-17-bundling-browser-module-treeshake-2
    • Wk-notes-01-16-Bundling-Treeshaking-1
    • Wk-notes-01-13-npm-script-css-scroll
    • Wk-notes-01-13-touchscreen-hover-and-apis
    • Wk-notes-01-13-emotion-x
    • Wk-notes-01-10-codemod
    • Wk-notes-01-08-live-region-react-test-lib
    • Wk-notes-01-06-eslint-finalise
  • 2019 Daily Notes
    • Wk-notes-12-11-eslint-dive-vscode-debug
    • Wk-notes-12-10-eslint-dive
    • Wk-notes-12-6-splunk
    • Wk-notes-12-3-react-function-memo
    • Wk-notes-12-2-agile-test-micro-frontend
    • Wk-notes-11-29-npm-fix-aem-datalayer-test
    • Wk-notes-11-28-adobe-dataLayer
    • Wk-notes-11-27-a11y
    • Wk-notes-11-25-upgrade-preact
    • Wk-notes-11-22-a11y-n-voice-over
    • Wk-notes-11-21-Add-Typescript
    • Wk-notes-11-20-JSDoc
    • Wk-notes-11-19-A11y-Polyfill
    • Wk-notes-11-18-jest-mock
    • Wk-notes-11-15-React-Portal
    • Wk-notes-11-14-iOS-simulator-git-hooks-All-hands-testing
    • Wk-notes-11-13-i18n
    • Wk-notes-11-12-safari-remote-debug
    • Wk-notes-11-11-migrating-typescript-git-remote-label-Emotion-controlled-component
    • Wk-notes-11-08-living-pricing-arch
    • Wk-notes-11-07-vitual-box-n-onblur-for-div
    • Wk-notes-11-06-bug-race-virtual-dom-diff
    • Wk-notes-11-05-babel-loader-eslint
Powered by GitBook
On this page
  • About react reference andReact.forwardRef()
  • forwardRef()

Was this helpful?

  1. 2020 Daily Notes

Wk-notes-01-30-React-ref

About react reference andReact.forwardRef()

Three ways

I. New hook way,

-----> this.inputRef.current to get access to the ref

const inputEl = useRef(); 
​
// Access it
const onClick = () => inputEl.current.focus();
​
// and pass it to ref props 
return <input ref={inputRef}/ onClick={onClick}>

II. callback ref, which is triggered whenever refs changed, gives the el itelf

----->this.inputRef to get access to the ref

In class

class {
  constructor(props){
    this.textInput = null;
​
    this.setTextInputRef = element => {
       // So that you can do crazy things inside
       this.textInput = element;
    };   
  }
  
  render(){
    return <input ref={this.setTextInputRef}/>
  }
}

Refs are guaranteed to be up-to-date before componentDidMount or componentDidUpdate fires.

III. Class component way ( >= v16.3 ), use this.inputRef = React.createRef(); in constructor(props) , and pass it into ref ref={this.inputRef},

-----> this.inputRef.current to get access to the ref

forwardRef()

ref and key are not props, they coule not be got from this.props, to forward a ref

const WrapperButton = React.forwardRef(function(props, ref){
  return <button ref={ref} className="FancyButton">
    {props.children}
  </button>
});

The hook to bind handler of forwarded ref to current function. Rare.

useImperativeHandle

If there is no DOMNode to the component/element, the ref will be set as the Component reference itself, which no one really use and care about.

Caveat: you need to manually do thing for HOC and forwarded the ref

The second ref argument only exists when you define a component with React.forwardRef call. Regular function or class components don’t receive the ref argument, and ref is not available in props either.

ref for WrapperButton will be the same as ref for button

PreviousWk-notes-01-31-g-recaptcha-npmshrinkwrapNextWk-notes-01-23-remote-android

Last updated 5 years ago

Was this helpful?